//默认的Modal,会将上一级的视图移走
let photobrowserController = PhotobrowserController(urls: urls,indexPaht: indexPath)
//指定动画的提供者,TransitioningDelegate 隐式动画。
photobrowserController.TransitioningDelegate = self?.photobrowserAnimator
//指定Model的样式是自定义的
photobrowserController.modalPresentationStyle = UIModalPresentationStyle.Custom
self?.presentVIEwController(photobrowserController,animated: false,completion: nil)
//-----------------------------------------------------定义转场动画类----------------------------------------------------------------------
import UIKit
/// 专门给控制器提供 ‘转场’ 的动画模型 class PhotobrowserAnimator: NSObject,UIVIEwControllerTransitioningDelegate { //是否展示动画 var isPresent = false /// 返回提供展现 Presented 转场动画的对象 func animationControllerForPresentedController(presented: UIVIEwController,presentingController presenting: UIVIEwController,sourceController source: UIVIEwController) -> UIVIEwControllerAnimatedTransitioning? { isPresent = true return self } /// 返回消失时 dismissed 转场动画的对象 func animationControllerFordismissedController(dismissed: UIVIEwController) -> UIVIEwControllerAnimatedTransitioning? { isPresent = false return self } } extension PhotobrowserAnimator: UIVIEwControllerAnimatedTransitioning{ /// '转场'时长 /// /// - parameter TransitionContext: Transition[转场]Context 上下文 /// /// - returns: 时长 func TransitionDuration(TransitionContext: UIVIEwControllerContextTransitioning?) -> NSTimeInterval { return 0.5 } /// 实现专场动画效果 - 一旦实现这个方法,必须完成动画效果 /// /// - parameter TransitionContext: Transition[转场]Context 提供一转场动画效果的一切细节 func animateTransition(TransitionContext: UIVIEwControllerContextTransitioning) { isPresent ? presentAnimation(TransitionContext) : dismissAnimation(TransitionContext) } /// 消失时动画 /// /// - parameter TransitionContext: TransitionContext private func dismissAnimation(TransitionContext: UIVIEwControllerContextTransitioning){ let fromVIEw = TransitionContext.vIEwControllerForKey(UITransitionContextFromVIEwControllerKey)?.vIEw UIVIEw.animateWithDuration(TransitionDuration(TransitionContext),animations: { () -> VoID in fromVIEw?.Alpha = 0 }) { (_) -> VoID in fromVIEw?.removeFromSupervIEw() TransitionContext.completeTransition(true) } } /// 出现时动画 /// /// - parameter TransitionContext: TransitionContext private func presentAnimation(TransitionContext: UIVIEwControllerContextTransitioning){ //展示动哈 let toVIEw = TransitionContext.vIEwControllerForKey(UITransitionContextToVIEwControllerKey)!.vIEw toVIEw.Alpha = 0 //获取容器视图 let containerVIEw = TransitionContext.containerVIEw() //将视图添加到容器视图上才能看到动画效果 containerVIEw?.addSubvIEw(toVIEw) UIVIEw.animateWithDuration(TransitionDuration(TransitionContext),animations: { () -> VoID in toVIEw.Alpha = 0 }) { (_ ) -> VoID in //动画完成后要声明方式 TransitionContext.completeTransition(true) } } } 总结以上是内存溢出为你收集整理的swift中基本转场动画.全部内容,希望文章能够帮你解决swift中基本转场动画.所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)