简体   繁体   English

用于swift中视图控制器的3D翻转动画

[英]3D Flip Animation for View Controllers in swift

I am trying to get 3d flip animations among view controllers like this 我想在这样的视图控制器中获得3d翻转动画

    https://github.com/nicklockwood/CubeController

For the animation.. basing on reverse value I set clock wise direction or anti clock direction 对于动画..基于反向值我设置时钟方向或反时钟方向

This is the code I am using for animation.. 这是我用于动画的代码..

    class CusNavAnimController : NSObject, UIViewControllerAnimatedTransitioning {

var reverse: Bool = false

func transitionDuration(transitionContext: UIViewControllerContextTransitioning?) -> NSTimeInterval {

    return 0.25
}

func animateTransition(transitionContext: UIViewControllerContextTransitioning) {

    let containerView = transitionContext.containerView()

    let toViewController = transitionContext.viewControllerForKey(UITransitionContextToViewControllerKey)!

    let fromViewController = transitionContext.viewControllerForKey(UITransitionContextFromViewControllerKey)!

    let toView = toViewController.view

    let fromView = fromViewController.view

    //
    toView.frame = UIScreen.mainScreen().bounds
    fromView.frame = UIScreen.mainScreen().bounds

    let direction: CGFloat = reverse ? -1 : 1
    let const: CGFloat = -0.005

    toView.layer.anchorPoint = CGPointMake(direction == 1 ? 0 : 1, 0.5)
    fromView.layer.anchorPoint = CGPointMake(direction == 1 ? 1 : 0, 0.5)

    var viewFromTransform: CATransform3D = CATransform3DMakeRotation(direction * CGFloat(M_PI_2), 0.0, 1.0, 0.0)
    var viewToTransform: CATransform3D = CATransform3DMakeRotation(-direction * CGFloat(M_PI_2), 0.0, 1.0, 0.0)

    viewFromTransform.m34 = const
    viewToTransform.m34 = const

    containerView!.transform = CGAffineTransformMakeTranslation(direction * containerView!.frame.size.width / 2.0, 0)
    toView.layer.transform = viewToTransform

    containerView!.addSubview(toView)

    UIView.animateWithDuration(transitionDuration(transitionContext), animations: {

        containerView!.transform = CGAffineTransformMakeTranslation(-direction * containerView!.frame.size.width / 2.0, 0)
        fromView.layer.transform = viewFromTransform
        toView.layer.transform = CATransform3DIdentity

        }, completion: {

            finished in

            containerView!.transform = CGAffineTransformIdentity
            fromView.layer.transform = CATransform3DIdentity
            toView.layer.transform = CATransform3DIdentity
            fromView.layer.anchorPoint = CGPointMake(0.5, 0.5)
            toView.layer.anchorPoint = CGPointMake(0.5, 0.5)

            if (transitionContext.transitionWasCancelled()) {

                toView.removeFromSuperview()

            } else {

                fromView.removeFromSuperview()
            }

            transitionContext.completeTransition(!transitionContext.transitionWasCancelled())
    })
}}

I am getting the animation but It is not same as the git hub link providing.. For my code.. the fromview is slightly going back and toview coming to front from that point.. can anyone suggest me the changes 我正在获取动画,但它与提供的git hub链接不一样..对于我的代码.. fromview稍微回头并从那一点来看到前面..任何人都可以建议我改变

UIViewAnimationOptions中查看TransitionFlipFromLeftTransitionFlipFromRight

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM