63 lines
1.7 KiB
Swift
63 lines
1.7 KiB
Swift
//
|
|
// ImageAnimator.swift
|
|
// NetNewsWire-iOS
|
|
//
|
|
// Created by Maurice Parker on 10/15/19.
|
|
// Copyright © 2019 Ranchero Software. All rights reserved.
|
|
//
|
|
|
|
import UIKit
|
|
|
|
class ImageTransition: NSObject, UIViewControllerAnimatedTransitioning {
|
|
|
|
let duration = 0.3
|
|
var presenting = true
|
|
var originFrame: CGRect!
|
|
var originImage: UIImage!
|
|
|
|
func transitionDuration(using transitionContext: UIViewControllerContextTransitioning?) -> TimeInterval {
|
|
return duration
|
|
}
|
|
|
|
func animateTransition(using transitionContext: UIViewControllerContextTransitioning) {
|
|
|
|
let destFrame: CGRect = {
|
|
if presenting {
|
|
let imageController = transitionContext.viewController(forKey: .to) as! ImageViewController
|
|
return imageController.zoomedFrame
|
|
} else {
|
|
let imageController = transitionContext.viewController(forKey: .from) as! ImageViewController
|
|
return imageController.zoomedFrame
|
|
}
|
|
}()
|
|
|
|
let initialFrame = presenting ? originFrame! : destFrame
|
|
let targetFrame = presenting ? destFrame : originFrame!
|
|
|
|
let imageView = UIImageView(image: originImage)
|
|
imageView.frame = initialFrame
|
|
|
|
let fromView = transitionContext.view(forKey: .from)!
|
|
fromView.removeFromSuperview()
|
|
|
|
transitionContext.containerView.backgroundColor = UIColor.systemBackground
|
|
transitionContext.containerView.addSubview(imageView)
|
|
|
|
UIView.animate(
|
|
withDuration: duration,
|
|
delay:0.0,
|
|
usingSpringWithDamping: 0.8,
|
|
initialSpringVelocity: 0.2,
|
|
animations: {
|
|
imageView.frame = targetFrame
|
|
}, completion: { _ in
|
|
imageView.removeFromSuperview()
|
|
let toView = transitionContext.view(forKey: .to)!
|
|
transitionContext.containerView.addSubview(toView)
|
|
transitionContext.completeTransition(true)
|
|
})
|
|
|
|
}
|
|
|
|
}
|