亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

iOS 控制器自定義動(dòng)畫(huà)跳轉(zhuǎn)方法(模態(tài)跳轉(zhuǎn))

 更新時(shí)間:2018年01月09日 10:31:54   作者:iMazy  
下面小編就為大家分享一篇iOS 控制器自定義動(dòng)畫(huà)跳轉(zhuǎn)方法(模態(tài)跳轉(zhuǎn)),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧

參考資料:

Apple 開(kāi)發(fā)文檔 Customizing the Transition Animations

WWDC 2013 Custom Transitions Using View Controllers

圖例:

跳轉(zhuǎn)的動(dòng)畫(huà)有很多,全部可以自定義

創(chuàng)建自定義跳轉(zhuǎn)必須遵循的三個(gè)步驟:

1、創(chuàng)建一個(gè)類(lèi),并實(shí)現(xiàn)了 UIViewControllerAnimatedTransitioning 協(xié)議

2、創(chuàng)建一個(gè)類(lèi)作為 UIViewControllerTransitioningDelegate 過(guò)渡代理

3、在模態(tài)跳轉(zhuǎn)前修改控制器的 transitioningDelegate 代理為自定義的代理(步驟2的代理類(lèi))

核心代碼示例

一、創(chuàng)建一個(gè)類(lèi),并實(shí)現(xiàn)了 UIViewControllerAnimatedTransitioning 協(xié)議

這個(gè)協(xié)議主要控制控制器視圖的顯示的,通過(guò) transitionContext 可以獲取到每個(gè)視圖和控制器,并進(jìn)行動(dòng)畫(huà)的設(shè)置

class AnimatedTransitioning: NSObject {
 var isPresenting: Bool = false
}
extension AnimatedTransitioning: UIViewControllerAnimatedTransitioning {
 func transitionDuration(using transitionContext: UIViewControllerContextTransitioning?) -> TimeInterval {
 return 0.5
 }
 func animateTransition(using transitionContext: UIViewControllerContextTransitioning) {
 let fromView = transitionContext.view(forKey: .from)!
 let toView = transitionContext.view(forKey: .to)!
 let containerView = transitionContext.containerView
 if isPresenting {
  toView.transform = CGAffineTransform(scaleX: 0, y: 0)
  containerView.addSubview(toView)
 } else {
  containerView.insertSubview(toView, belowSubview: fromView)
 }
 UIView.animate(withDuration: 0.5, animations: {
  if self.isPresenting {
  toView.transform = CGAffineTransform.identity
  } else {
  fromView.transform = CGAffineTransform(scaleX: 0.001, y: 0.001)
  }
 }) { (finished) in
  transitionContext.completeTransition(finished)
 }
 }
}

二、創(chuàng)建一個(gè)類(lèi)作為 UIViewControllerTransitioningDelegate 過(guò)渡代理

這里設(shè)置 presented 和 dismissed 時(shí)各自的動(dòng)畫(huà)轉(zhuǎn)換類(lèi),可以設(shè)置為不同的類(lèi)

class CustomTransitioningDelegate: NSObject, UIViewControllerTransitioningDelegate {
 func animationController(forPresented presented: UIViewController, presenting: UIViewController, source: UIViewController) -> UIViewControllerAnimatedTransitioning? {
 let at = AnimatedTransitioning()
 at.isPresenting = true
 return at
 }
 func animationController(forDismissed dismissed: UIViewController) -> UIViewControllerAnimatedTransitioning? {
 let at = AnimatedTransitioning()
 at.isPresenting = false
 return at
 }
}

三、在模態(tài)跳轉(zhuǎn)前修改控制器的 transitioningDelegate 代理為自定義的代理

注意:代理不能為局部變量

class ViewController: UIViewController {
 // 必須保存為實(shí)例變量
 var ctDelegate = CustomTransitioningDelegate()
 override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
 let vc = TempViewController()
 vc.transitioningDelegate = ctDelegate
 self.present(vc, animated: true, completion: nil)
 }
}

以上這篇iOS 控制器自定義動(dòng)畫(huà)跳轉(zhuǎn)方法(模態(tài)跳轉(zhuǎn))就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

最新評(píng)論