Swi*_*yJD 4 uinavigationcontroller ios segue swift
我正在尝试实现类似于以下内容:
但在导航控制器内部具有推送功能。有没有办法做到这一点?
我已经在几个月前做到了。
1.自定义您的过渡。例如,这是Push(例如Pop):
class BWFlipTransionPush: NSObject, UIViewControllerAnimatedTransitioning {
func transitionDuration(transitionContext: UIViewControllerContextTransitioning?) -> NSTimeInterval {
return 0.5
}
func animateTransition(transitionContext: UIViewControllerContextTransitioning) {
let fromVC = transitionContext.viewControllerForKey(UITransitionContextFromViewControllerKey)
let toVC = transitionContext.viewControllerForKey(UITransitionContextToViewControllerKey)! // as! UBPasswordLoginViewController
let container = transitionContext.containerView()
container!.addSubview(toVC.view)
container!.bringSubviewToFront(fromVC!.view)
//??m34
var transfrom = CATransform3DIdentity
transfrom.m34 = -0.002
container!.layer.sublayerTransform = transfrom
//??anrchPoint ? position
let initalFrame = transitionContext.initialFrameForViewController(fromVC!)
toVC.view.frame = initalFrame
fromVC!.view.frame = initalFrame
toVC.view.layer.transform = CATransform3DMakeRotation(CGFloat(M_PI_2), 0, 1, 0)
//??
UIView.animateWithDuration(transitionDuration(transitionContext), delay: 0, options: UIViewAnimationOptions.CurveEaseOut, animations: { () -> Void in
fromVC!.view.layer.transform = CATransform3DMakeRotation(CGFloat(-M_PI_2), 0, 1, 0)
}) { (finished: Bool) -> Void in
container?.bringSubviewToFront(toVC.view)
UIView.animateWithDuration(self.transitionDuration(transitionContext), delay: 0, options: UIViewAnimationOptions.CurveEaseOut, animations: { () -> Void in
toVC.view.layer.transform = CATransform3DIdentity
}) { (finished: Bool) -> Void in
fromVC!.view.layer.transform = CATransform3DIdentity
transitionContext.completeTransition(!transitionContext.transitionWasCancelled())
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
2.为导航控制器设置委托,如下所示:
override func viewDidLoad() {
super.viewDidLoad()
navigationController?.delegate = self
}
Run Code Online (Sandbox Code Playgroud)
3.实现委托功能:
func navigationController(navigationController: UINavigationController, animationControllerForOperation operation: UINavigationControllerOperation, fromViewController fromVC: UIViewController, toViewController toVC: UIViewController) -> UIViewControllerAnimatedTransitioning? {
switch operation {
case .Pop:
return nil // you should return customized pop
case .Push:
return BWFlipTransionPush()
default:
return nil
}
}
Run Code Online (Sandbox Code Playgroud)
更新
这里是弹出:
class BWFlipTransionPop: NSObject, UIViewControllerAnimatedTransitioning {
func transitionDuration(transitionContext: UIViewControllerContextTransitioning?) -> NSTimeInterval {
return 0.5
}
func animateTransition(transitionContext: UIViewControllerContextTransitioning) {
let fromVC = transitionContext.viewControllerForKey(UITransitionContextFromViewControllerKey)! // as! UBPasswordLoginViewController
let toVC = transitionContext.viewControllerForKey(UITransitionContextToViewControllerKey)
let container = transitionContext.containerView()
container!.addSubview(toVC!.view)
//??m34
var transfrom = CATransform3DIdentity
transfrom.m34 = -0.002
container!.layer.sublayerTransform = transfrom
//??anrchPoint ? position
let initalFrame = transitionContext.initialFrameForViewController(fromVC)
toVC!.view.frame = initalFrame
toVC!.view.layer.transform = CATransform3DMakeRotation(CGFloat(-M_PI_2), 0, 1, 0)
//??
UIView.animateWithDuration(transitionDuration(transitionContext), delay: 0, options: UIViewAnimationOptions.CurveEaseOut, animations: { () -> Void in
fromVC.view.layer.transform = CATransform3DMakeRotation(CGFloat(M_PI_2), 0, 1, 0)
}) { (finished: Bool) -> Void in
container?.bringSubviewToFront(toVC!.view)
UIView.animateWithDuration(self.transitionDuration(transitionContext), delay: 0, options: UIViewAnimationOptions.CurveEaseOut, animations: { () -> Void in
toVC!.view.layer.transform = CATransform3DIdentity
}) { (finished: Bool) -> Void in
fromVC.view.layer.transform = CATransform3DIdentity
transitionContext.completeTransition(!transitionContext.transitionWasCancelled())
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1421 次 |
| 最近记录: |