Compare commits
3 Commits
810ae71832
...
0a8d50cc27
Author | SHA1 | Date |
---|---|---|
Shadowfacts | 0a8d50cc27 | |
Shadowfacts | 11e81acbc1 | |
Shadowfacts | fb2c9b341c |
|
@ -14,6 +14,7 @@ import VisionKit
|
||||||
protocol LargeImageContentView: UIView {
|
protocol LargeImageContentView: UIView {
|
||||||
var animationImage: UIImage? { get }
|
var animationImage: UIImage? { get }
|
||||||
var activityItemsForSharing: [Any] { get }
|
var activityItemsForSharing: [Any] { get }
|
||||||
|
var owner: LargeImageViewController? { get set }
|
||||||
func setControlsVisible(_ controlsVisible: Bool)
|
func setControlsVisible(_ controlsVisible: Bool)
|
||||||
func grayscaleStateChanged()
|
func grayscaleStateChanged()
|
||||||
}
|
}
|
||||||
|
@ -29,17 +30,14 @@ class LargeImageImageContentView: UIImageView, LargeImageContentView {
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
var animationImage: UIImage? { image! }
|
var animationImage: UIImage? { image! }
|
||||||
|
|
||||||
var activityItemsForSharing: [Any] {
|
var activityItemsForSharing: [Any] {
|
||||||
[image!]
|
[image!]
|
||||||
}
|
}
|
||||||
|
weak var owner: LargeImageViewController?
|
||||||
|
|
||||||
private var sourceData: Data?
|
private var sourceData: Data?
|
||||||
private weak var owner: UIViewController?
|
|
||||||
|
|
||||||
init(image: UIImage, owner: UIViewController?) {
|
init(image: UIImage) {
|
||||||
self.owner = owner
|
|
||||||
|
|
||||||
super.init(image: image)
|
super.init(image: image)
|
||||||
|
|
||||||
contentMode = .scaleAspectFit
|
contentMode = .scaleAspectFit
|
||||||
|
@ -109,11 +107,11 @@ extension LargeImageImageContentView: ImageAnalysisInteractionDelegate {
|
||||||
|
|
||||||
class LargeImageGifContentView: GIFImageView, LargeImageContentView {
|
class LargeImageGifContentView: GIFImageView, LargeImageContentView {
|
||||||
var animationImage: UIImage? { image }
|
var animationImage: UIImage? { image }
|
||||||
|
|
||||||
var activityItemsForSharing: [Any] {
|
var activityItemsForSharing: [Any] {
|
||||||
// todo: should gifs share the data?
|
// todo: should gifs share the data?
|
||||||
[image].compactMap { $0 }
|
[image].compactMap { $0 }
|
||||||
}
|
}
|
||||||
|
weak var owner: LargeImageViewController?
|
||||||
|
|
||||||
init(gifController: GIFController) {
|
init(gifController: GIFController) {
|
||||||
super.init(image: gifController.lastFrame?.image)
|
super.init(image: gifController.lastFrame?.image)
|
||||||
|
@ -144,6 +142,7 @@ class LargeImageGifvContentView: GifvAttachmentView, LargeImageContentView {
|
||||||
// some SO posts indicate that just sharing a URL to the video should work, but that may need to be a local URL?
|
// some SO posts indicate that just sharing a URL to the video should work, but that may need to be a local URL?
|
||||||
[]
|
[]
|
||||||
}
|
}
|
||||||
|
weak var owner: LargeImageViewController?
|
||||||
|
|
||||||
private let asset: AVURLAsset
|
private let asset: AVURLAsset
|
||||||
|
|
||||||
|
|
|
@ -103,15 +103,19 @@ class LargeImageViewController: UIViewController, UIScrollViewDelegate, LargeIma
|
||||||
dismissInteractionController = LargeImageInteractionController(viewController: self)
|
dismissInteractionController = LargeImageInteractionController(viewController: self)
|
||||||
}
|
}
|
||||||
|
|
||||||
view.addGestureRecognizer(UITapGestureRecognizer(target: self, action: #selector(scrollViewPressed(_:))))
|
let singleTap = UITapGestureRecognizer(target: self, action: #selector(scrollViewPressed(_:)))
|
||||||
let doubleTap = UITapGestureRecognizer(target: self, action: #selector(scrollViewDoubleTapped(_:)))
|
let doubleTap = UITapGestureRecognizer(target: self, action: #selector(scrollViewDoubleTapped(_:)))
|
||||||
doubleTap.numberOfTapsRequired = 2
|
doubleTap.numberOfTapsRequired = 2
|
||||||
|
// this requirement is needed to make sure the double tap is ever recognized
|
||||||
|
singleTap.require(toFail: doubleTap)
|
||||||
|
view.addGestureRecognizer(singleTap)
|
||||||
view.addGestureRecognizer(doubleTap)
|
view.addGestureRecognizer(doubleTap)
|
||||||
|
|
||||||
NotificationCenter.default.addObserver(self, selector: #selector(preferencesChanged), name: .preferencesChanged, object: nil)
|
NotificationCenter.default.addObserver(self, selector: #selector(preferencesChanged), name: .preferencesChanged, object: nil)
|
||||||
}
|
}
|
||||||
|
|
||||||
private func setupContentView() {
|
private func setupContentView() {
|
||||||
|
contentView.owner = self
|
||||||
contentView.translatesAutoresizingMaskIntoConstraints = false
|
contentView.translatesAutoresizingMaskIntoConstraints = false
|
||||||
scrollView.addSubview(contentView)
|
scrollView.addSubview(contentView)
|
||||||
contentViewLeadingConstraint = contentView.leadingAnchor.constraint(equalTo: scrollView.leadingAnchor)
|
contentViewLeadingConstraint = contentView.leadingAnchor.constraint(equalTo: scrollView.leadingAnchor)
|
||||||
|
|
|
@ -138,9 +138,9 @@ class LoadingLargeImageViewController: UIViewController, LargeImageAnimatableVie
|
||||||
content = LargeImageGifContentView(gifController: gifController)
|
content = LargeImageGifContentView(gifController: gifController)
|
||||||
} else {
|
} else {
|
||||||
if let transformedImage = ImageGrayscalifier.convertIfNecessary(url: url, image: image) {
|
if let transformedImage = ImageGrayscalifier.convertIfNecessary(url: url, image: image) {
|
||||||
content = LargeImageImageContentView(image: transformedImage, owner: self)
|
content = LargeImageImageContentView(image: transformedImage)
|
||||||
} else {
|
} else {
|
||||||
content = LargeImageImageContentView(image: image, owner: self)
|
content = LargeImageImageContentView(image: image)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -167,7 +167,7 @@ class LoadingLargeImageViewController: UIViewController, LargeImageAnimatableVie
|
||||||
let grayscale = ImageGrayscalifier.convert(url: nil, cgImage: source) {
|
let grayscale = ImageGrayscalifier.convert(url: nil, cgImage: source) {
|
||||||
image = grayscale
|
image = grayscale
|
||||||
}
|
}
|
||||||
setContent(LargeImageImageContentView(image: image, owner: self))
|
setContent(LargeImageImageContentView(image: image))
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -44,6 +44,7 @@ class TimelineGapCollectionViewCell: UICollectionViewCell {
|
||||||
let label = UILabel()
|
let label = UILabel()
|
||||||
label.text = "Load more"
|
label.text = "Load more"
|
||||||
label.font = .preferredFont(forTextStyle: .headline)
|
label.font = .preferredFont(forTextStyle: .headline)
|
||||||
|
label.adjustsFontForContentSizeCategory = true
|
||||||
label.textColor = .tintColor
|
label.textColor = .tintColor
|
||||||
|
|
||||||
chevronView.update(direction: .above)
|
chevronView.update(direction: .above)
|
||||||
|
|
|
@ -357,6 +357,7 @@ class CustomAlertActionButton: UIControl {
|
||||||
titleView = UIStackView()
|
titleView = UIStackView()
|
||||||
titleView.axis = .horizontal
|
titleView.axis = .horizontal
|
||||||
titleView.spacing = 4
|
titleView.spacing = 4
|
||||||
|
titleView.alignment = .center
|
||||||
|
|
||||||
if let title = action.title {
|
if let title = action.title {
|
||||||
let label = UILabel()
|
let label = UILabel()
|
||||||
|
|
|
@ -11,7 +11,7 @@ import Pachyderm
|
||||||
|
|
||||||
struct ToastConfiguration {
|
struct ToastConfiguration {
|
||||||
var systemImageName: String?
|
var systemImageName: String?
|
||||||
var titleFont: UIFont = .boldSystemFont(ofSize: 14)
|
var titleFont: UIFont = UIFontMetrics(forTextStyle: .body).scaledFont(for: .boldSystemFont(ofSize: 14))
|
||||||
var title: String
|
var title: String
|
||||||
var subtitle: String?
|
var subtitle: String?
|
||||||
var actionTitle: String?
|
var actionTitle: String?
|
||||||
|
|
|
@ -68,13 +68,15 @@ class ToastView: UIView {
|
||||||
titleLabel.textColor = .white
|
titleLabel.textColor = .white
|
||||||
titleLabel.font = configuration.titleFont
|
titleLabel.font = configuration.titleFont
|
||||||
titleLabel.adjustsFontSizeToFitWidth = true
|
titleLabel.adjustsFontSizeToFitWidth = true
|
||||||
|
titleLabel.adjustsFontForContentSizeCategory = true
|
||||||
|
|
||||||
if let subtitle = configuration.subtitle {
|
if let subtitle = configuration.subtitle {
|
||||||
let subtitleLabel = UILabel()
|
let subtitleLabel = UILabel()
|
||||||
subtitleLabel.text = subtitle
|
subtitleLabel.text = subtitle
|
||||||
subtitleLabel.textColor = .white
|
subtitleLabel.textColor = .white
|
||||||
subtitleLabel.numberOfLines = 0
|
subtitleLabel.numberOfLines = 0
|
||||||
subtitleLabel.font = .systemFont(ofSize: 14)
|
subtitleLabel.font = UIFontMetrics(forTextStyle: .body).scaledFont(for: .systemFont(ofSize: 14))
|
||||||
|
subtitleLabel.adjustsFontForContentSizeCategory = true
|
||||||
let vStack = UIStackView(arrangedSubviews: [
|
let vStack = UIStackView(arrangedSubviews: [
|
||||||
titleLabel,
|
titleLabel,
|
||||||
subtitleLabel
|
subtitleLabel
|
||||||
|
@ -89,7 +91,8 @@ class ToastView: UIView {
|
||||||
if let actionTitle = configuration.actionTitle {
|
if let actionTitle = configuration.actionTitle {
|
||||||
let actionLabel = UILabel()
|
let actionLabel = UILabel()
|
||||||
actionLabel.text = actionTitle
|
actionLabel.text = actionTitle
|
||||||
actionLabel.font = .boldSystemFont(ofSize: 16)
|
actionLabel.font = UIFontMetrics(forTextStyle: .body).scaledFont(for: .boldSystemFont(ofSize: 16))
|
||||||
|
actionLabel.adjustsFontForContentSizeCategory = true
|
||||||
actionLabel.textColor = .white
|
actionLabel.textColor = .white
|
||||||
stack.addArrangedSubview(actionLabel)
|
stack.addArrangedSubview(actionLabel)
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue