forked from shadowfacts/Tusker
Fixes for large image animations on devices with square screns
This commit is contained in:
parent
3413dff8f9
commit
472b9aa5e2
|
@ -51,8 +51,14 @@ class GalleryViewController: UIPageViewController, UIPageViewControllerDataSourc
|
||||||
}
|
}
|
||||||
var dismissInteractionController: LargeImageInteractionController?
|
var dismissInteractionController: LargeImageInteractionController?
|
||||||
|
|
||||||
|
var isInteractivelyAnimatingDismissal: Bool = false {
|
||||||
|
didSet {
|
||||||
|
setNeedsStatusBarAppearanceUpdate()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
override var prefersStatusBarHidden: Bool {
|
override var prefersStatusBarHidden: Bool {
|
||||||
return true
|
return !isInteractivelyAnimatingDismissal
|
||||||
}
|
}
|
||||||
override var preferredStatusBarUpdateAnimation: UIStatusBarAnimation {
|
override var preferredStatusBarUpdateAnimation: UIStatusBarAnimation {
|
||||||
return .none
|
return .none
|
||||||
|
|
|
@ -51,8 +51,14 @@ class LargeImageViewController: UIViewController, UIScrollViewDelegate, LargeIma
|
||||||
private var prevZoomScale: CGFloat?
|
private var prevZoomScale: CGFloat?
|
||||||
private var isGrayscale = false
|
private var isGrayscale = false
|
||||||
|
|
||||||
|
var isInteractivelyAnimatingDismissal: Bool = false {
|
||||||
|
didSet {
|
||||||
|
setNeedsStatusBarAppearanceUpdate()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
override var prefersStatusBarHidden: Bool {
|
override var prefersStatusBarHidden: Bool {
|
||||||
return true
|
return !isInteractivelyAnimatingDismissal
|
||||||
}
|
}
|
||||||
override var preferredStatusBarUpdateAnimation: UIStatusBarAnimation {
|
override var preferredStatusBarUpdateAnimation: UIStatusBarAnimation {
|
||||||
return .none
|
return .none
|
||||||
|
|
|
@ -43,8 +43,14 @@ class LoadingLargeImageViewController: UIViewController, LargeImageAnimatableVie
|
||||||
var animationGifData: Data? { largeImageVC?.animationGifData }
|
var animationGifData: Data? { largeImageVC?.animationGifData }
|
||||||
var dismissInteractionController: LargeImageInteractionController?
|
var dismissInteractionController: LargeImageInteractionController?
|
||||||
|
|
||||||
|
var isInteractivelyAnimatingDismissal: Bool = false {
|
||||||
|
didSet {
|
||||||
|
setNeedsStatusBarAppearanceUpdate()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
override var prefersStatusBarHidden: Bool {
|
override var prefersStatusBarHidden: Bool {
|
||||||
return true
|
return !isInteractivelyAnimatingDismissal
|
||||||
}
|
}
|
||||||
override var preferredStatusBarUpdateAnimation: UIStatusBarAnimation {
|
override var preferredStatusBarUpdateAnimation: UIStatusBarAnimation {
|
||||||
return .none
|
return .none
|
||||||
|
|
|
@ -15,6 +15,7 @@ protocol LargeImageAnimatableViewController: UIViewController {
|
||||||
var animationImage: UIImage? { get }
|
var animationImage: UIImage? { get }
|
||||||
var animationGifData: Data? { get }
|
var animationGifData: Data? { get }
|
||||||
var dismissInteractionController: LargeImageInteractionController? { get }
|
var dismissInteractionController: LargeImageInteractionController? { get }
|
||||||
|
var isInteractivelyAnimatingDismissal: Bool { get set }
|
||||||
}
|
}
|
||||||
|
|
||||||
extension LargeImageAnimatableViewController {
|
extension LargeImageAnimatableViewController {
|
||||||
|
@ -74,7 +75,7 @@ class LargeImageExpandAnimationController: NSObject, UIViewControllerAnimatedTra
|
||||||
toVC.largeImageController?.contentView.isHidden = true
|
toVC.largeImageController?.contentView.isHidden = true
|
||||||
toVC.largeImageController?.setControlsVisible(false, animated: false)
|
toVC.largeImageController?.setControlsVisible(false, animated: false)
|
||||||
|
|
||||||
var finalFrameSize = finalVCFrame.inset(by: fromVC.view.safeAreaInsets).size
|
var finalFrameSize = finalVCFrame.inset(by: toVC.view.safeAreaInsets).size
|
||||||
let newWidth = finalFrameSize.width / image.size.width
|
let newWidth = finalFrameSize.width / image.size.width
|
||||||
let newHeight = finalFrameSize.height / image.size.height
|
let newHeight = finalFrameSize.height / image.size.height
|
||||||
if newHeight < newWidth {
|
if newHeight < newWidth {
|
||||||
|
|
|
@ -14,9 +14,9 @@ class LargeImageInteractionController: UIPercentDrivenInteractiveTransition {
|
||||||
var direction: CGFloat?
|
var direction: CGFloat?
|
||||||
|
|
||||||
var shouldCompleteTransition = false
|
var shouldCompleteTransition = false
|
||||||
private weak var viewController: UIViewController!
|
private weak var viewController: LargeImageAnimatableViewController!
|
||||||
|
|
||||||
init(viewController: UIViewController) {
|
init(viewController: LargeImageAnimatableViewController) {
|
||||||
super.init()
|
super.init()
|
||||||
self.viewController = viewController
|
self.viewController = viewController
|
||||||
let panRecognizer = UIPanGestureRecognizer(target: self, action: #selector(handleGesture(_:)))
|
let panRecognizer = UIPanGestureRecognizer(target: self, action: #selector(handleGesture(_:)))
|
||||||
|
@ -42,6 +42,7 @@ class LargeImageInteractionController: UIPercentDrivenInteractiveTransition {
|
||||||
viewController.dismiss(animated: true)
|
viewController.dismiss(animated: true)
|
||||||
case .changed:
|
case .changed:
|
||||||
shouldCompleteTransition = progress > 0.5 || velocity > 1000
|
shouldCompleteTransition = progress > 0.5 || velocity > 1000
|
||||||
|
viewController.isInteractivelyAnimatingDismissal = progress > 0.1
|
||||||
update(progress)
|
update(progress)
|
||||||
case .cancelled:
|
case .cancelled:
|
||||||
inProgress = false
|
inProgress = false
|
||||||
|
@ -59,4 +60,9 @@ class LargeImageInteractionController: UIPercentDrivenInteractiveTransition {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override func cancel() {
|
||||||
|
super.cancel()
|
||||||
|
viewController.isInteractivelyAnimatingDismissal = false
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue