Compare commits
3 Commits
f2e08e96f3
...
d7953470e3
Author | SHA1 | Date |
---|---|---|
Shadowfacts | d7953470e3 | |
Shadowfacts | 8c7bebcce8 | |
Shadowfacts | 20c602f911 |
|
@ -94,10 +94,12 @@ class BookmarksTableViewController: EnhancedTableViewController {
|
|||
self.statuses.append(contentsOf: newStatuses.map { ($0.id, .unknown) })
|
||||
|
||||
DispatchQueue.main.async {
|
||||
UIView.performWithoutAnimation {
|
||||
self.tableView.insertRows(at: newIndexPaths, with: .automatic)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
override func tableView(_ tableView: UITableView, canEditRowAt indexPath: IndexPath) -> Bool {
|
||||
return true
|
||||
|
|
|
@ -52,7 +52,7 @@ class GalleryViewController: UIPageViewController, UIPageViewControllerDataSourc
|
|||
switch $0.kind {
|
||||
case .image:
|
||||
return AttachmentViewController(attachment: $0)
|
||||
case .video:
|
||||
case .video, .audio:
|
||||
let vc = AVPlayerViewController()
|
||||
vc.player = AVPlayer(url: $0.url)
|
||||
return vc
|
||||
|
|
|
@ -37,8 +37,6 @@ class LargeImageViewController: UIViewController, UIScrollViewDelegate {
|
|||
@IBOutlet weak var bottomControlsView: UIView!
|
||||
@IBOutlet weak var descriptionLabel: UILabel!
|
||||
|
||||
var initializedTopControlsConstrains = false
|
||||
|
||||
var image: UIImage?
|
||||
var gifData: Data?
|
||||
var imageDescription: String?
|
||||
|
@ -120,8 +118,6 @@ class LargeImageViewController: UIViewController, UIScrollViewDelegate {
|
|||
|
||||
centerImage()
|
||||
|
||||
if !initializedTopControlsConstrains {
|
||||
initializedTopControlsConstrains = true
|
||||
if view.safeAreaInsets.top == 44 {
|
||||
// running on iPhone X style notched device
|
||||
let notchWidth: CGFloat = 209
|
||||
|
@ -131,7 +127,6 @@ class LargeImageViewController: UIViewController, UIScrollViewDelegate {
|
|||
closeButtonTrailingConstraint.constant = offset
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func imageForDismissalAnimation() -> UIImage? {
|
||||
return sourceInfo?.image ?? image
|
||||
|
|
|
@ -143,11 +143,13 @@ class NotificationsTableViewController: EnhancedTableViewController {
|
|||
self.older = pagination?.older
|
||||
|
||||
DispatchQueue.main.async {
|
||||
UIView.performWithoutAnimation {
|
||||
self.tableView.insertRows(at: newIndexPaths, with: .automatic)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
override func tableView(_ tableView: UITableView, canEditRowAt indexPath: IndexPath) -> Bool {
|
||||
return true
|
||||
|
@ -224,7 +226,9 @@ class NotificationsTableViewController: EnhancedTableViewController {
|
|||
let newIndexPaths = (0..<groups.count).map {
|
||||
IndexPath(row: $0, section: 0)
|
||||
}
|
||||
UIView.performWithoutAnimation {
|
||||
self.tableView.insertRows(at: newIndexPaths, with: .automatic)
|
||||
}
|
||||
|
||||
self.refreshControl?.endRefreshing()
|
||||
|
||||
|
|
|
@ -106,11 +106,13 @@ class TimelineTableViewController: EnhancedTableViewController {
|
|||
let newIndexPaths = newRows.map { IndexPath(row: $0, section: self.timelineSegments.count - 1) }
|
||||
self.timelineSegments[self.timelineSegments.count - 1].append(contentsOf: newStatuses.map { ($0.id, .unknown) })
|
||||
DispatchQueue.main.async {
|
||||
UIView.performWithoutAnimation {
|
||||
self.tableView.insertRows(at: newIndexPaths, with: .none)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
override func tableView(_ tableView: UITableView, canEditRowAt indexPath: IndexPath) -> Bool {
|
||||
return true
|
||||
|
@ -142,7 +144,9 @@ class TimelineTableViewController: EnhancedTableViewController {
|
|||
let newIndexPaths = (0..<newStatuses.count).map {
|
||||
IndexPath(row: $0, section: 0)
|
||||
}
|
||||
UIView.performWithoutAnimation {
|
||||
self.tableView.insertRows(at: newIndexPaths, with: .automatic)
|
||||
}
|
||||
|
||||
self.refreshControl?.endRefreshing()
|
||||
|
||||
|
|
|
@ -19,7 +19,7 @@ class AttachmentView: UIImageView, GIFAnimatable {
|
|||
|
||||
weak var delegate: AttachmentViewDelegate?
|
||||
|
||||
var playImageView: UIImageView!
|
||||
var playImageView: UIImageView?
|
||||
|
||||
var attachment: Attachment!
|
||||
var index: Int!
|
||||
|
@ -54,25 +54,21 @@ class AttachmentView: UIImageView, GIFAnimatable {
|
|||
isUserInteractionEnabled = true
|
||||
addGestureRecognizer(UITapGestureRecognizer(target: self, action: #selector(imagePressed)))
|
||||
|
||||
playImageView = UIImageView(image: UIImage(systemName: "play.circle.fill"))
|
||||
playImageView.translatesAutoresizingMaskIntoConstraints = false
|
||||
addSubview(playImageView)
|
||||
NSLayoutConstraint.activate([
|
||||
playImageView.widthAnchor.constraint(equalToConstant: 50),
|
||||
playImageView.heightAnchor.constraint(equalToConstant: 50),
|
||||
playImageView.centerXAnchor.constraint(equalTo: centerXAnchor),
|
||||
playImageView.centerYAnchor.constraint(equalTo: centerYAnchor)
|
||||
])
|
||||
}
|
||||
|
||||
func loadAttachment() {
|
||||
guard AttachmentsContainerView.supportedAttachmentTypes.contains(attachment.kind) else {
|
||||
preconditionFailure("invalid attachment type")
|
||||
}
|
||||
switch attachment.kind {
|
||||
case .image:
|
||||
loadImage()
|
||||
case .video:
|
||||
loadVideo()
|
||||
case .audio:
|
||||
loadAudio()
|
||||
default:
|
||||
fatalError()
|
||||
preconditionFailure("invalid attachment type")
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -89,8 +85,6 @@ class AttachmentView: UIImageView, GIFAnimatable {
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
playImageView.isHidden = true
|
||||
}
|
||||
|
||||
func loadVideo() {
|
||||
|
@ -106,7 +100,36 @@ class AttachmentView: UIImageView, GIFAnimatable {
|
|||
}
|
||||
}
|
||||
|
||||
playImageView.isHidden = false
|
||||
let playImageView = UIImageView(image: UIImage(systemName: "play.circle.fill"))
|
||||
playImageView.translatesAutoresizingMaskIntoConstraints = false
|
||||
addSubview(playImageView)
|
||||
NSLayoutConstraint.activate([
|
||||
playImageView.widthAnchor.constraint(equalToConstant: 50),
|
||||
playImageView.heightAnchor.constraint(equalToConstant: 50),
|
||||
playImageView.centerXAnchor.constraint(equalTo: centerXAnchor),
|
||||
playImageView.centerYAnchor.constraint(equalTo: centerYAnchor),
|
||||
])
|
||||
}
|
||||
|
||||
func loadAudio() {
|
||||
let label = UILabel()
|
||||
label.text = "Audio Only"
|
||||
let playImageView = UIImageView(image: UIImage(systemName: "play.circle.fill"))
|
||||
let stack = UIStackView(arrangedSubviews: [
|
||||
label,
|
||||
playImageView
|
||||
])
|
||||
stack.translatesAutoresizingMaskIntoConstraints = false
|
||||
stack.axis = .vertical
|
||||
stack.spacing = 8
|
||||
stack.alignment = .center
|
||||
addSubview(stack)
|
||||
NSLayoutConstraint.activate([
|
||||
stack.centerXAnchor.constraint(equalTo: centerXAnchor),
|
||||
stack.centerYAnchor.constraint(equalTo: centerYAnchor),
|
||||
playImageView.widthAnchor.constraint(equalToConstant: 50),
|
||||
playImageView.heightAnchor.constraint(equalToConstant: 50),
|
||||
])
|
||||
}
|
||||
|
||||
override func display(_ layer: CALayer) {
|
||||
|
|
|
@ -11,6 +11,8 @@ import Pachyderm
|
|||
|
||||
class AttachmentsContainerView: UIView {
|
||||
|
||||
static let supportedAttachmentTypes = [Attachment.Kind.image, .video, .audio]
|
||||
|
||||
weak var delegate: AttachmentViewDelegate?
|
||||
|
||||
var statusID: String!
|
||||
|
@ -47,7 +49,7 @@ class AttachmentsContainerView: UIView {
|
|||
|
||||
func updateUI(status: Status) {
|
||||
self.statusID = status.id
|
||||
attachments = status.attachments.filter { $0.kind == .image || $0.kind == .video }
|
||||
attachments = status.attachments.filter { AttachmentsContainerView.supportedAttachmentTypes.contains($0.kind) }
|
||||
|
||||
attachmentViews.allObjects.forEach { $0.removeFromSuperview() }
|
||||
attachmentViews.removeAllObjects()
|
||||
|
|
Loading…
Reference in New Issue