2

2 つのビュー間で遷移アニメーションを機能させるために、数時間試してみました。コードをios8.1で動作させると、ios9.1で動作しなくなり、その逆になるという問題が常に発生します。問題は、移行したいビューが消えてしまうことです。そのようなトピックがたくさんあったことは知っていますが、どれもうまくいきませんでした.iOSの1つのバージョンでは常に役に立ちましたが、他のバージョンではうまくいきませんでした. アニメーションが正常に機能しないという問題は、AutoLayout を使用することであり、その解決策の 1 つは、代わりにレイヤー変換を使用することであるとどこかで読んだことがあります。 'iOS9では動作しません...これが私が使用し、iOS8で動作するコードです

 class ChannelDetailsCollectionViewController: UICollectionViewController {
     @IBAction func backButtonPressed(sender: AnyObject) {
            self.navigationController?.popViewControllerAnimated(true)
        }
    }

class UIAnimatedNavigationControllerDelegate: NSObject, UINavigationControllerDelegate {
func navigationController(navigationController: UINavigationController, animationControllerForOperation operation: UINavigationControllerOperation, fromViewController fromVC: UIViewController, toViewController toVC: UIViewController) -> UIViewControllerAnimatedTransitioning? {
    if operation == .Push {
        return SlideInAnimator()
    } else if operation == .Pop {
        return SlideInDismissAnimator()
    } else {
        return nil
    }
}


 func animateTransition(transitionContext: UIViewControllerContextTransitioning) {

    let containerView = transitionContext.containerView()!
    let toView = transitionContext.viewForKey(UITransitionContextToViewKey)!
    let fromView = transitionContext.viewForKey(UITransitionContextFromViewKey)!

    let duration = self.transitionDuration(transitionContext)

    containerView.addSubview(toView)

    let transition = CATransition()
    transition.startProgress = 0
    transition.endProgress = 1
    transition.speed  = 3.0
    transition.type = kCATransitionPush
    transition.subtype = kCATransitionFromLeft
    transition.duration = 1.0

    fromView.layer.addAnimation(transition, forKey:"transition")
    toView.layer.addAnimation(transition, forKey:"transition")

    fromView.hidden = true
    toView.hidden = false
    transitionContext.completeTransition(true)
}

そして、これがiOS9で機能したものです。このバージョンでは、 toView.transform = CGAffineTransformIdentity が呼び出されたときに iOS8 でビューが消えることがわかりました。nil ビューをチェックして再度追加しようとしましたが、それでも機能しません。

func animateTransition(transitionContext: UIViewControllerContextTransitioning) {
    let container = transitionContext.containerView()
    let fromViewController = transitionContext.viewControllerForKey(UITransitionContextFromViewControllerKey)
    let fromView = fromViewController!.view
    let toViewController = transitionContext.viewControllerForKey(UITransitionContextToViewControllerKey)
    let toView = toViewController!.view

    toView.transform = getSlideTransform(toView, offset: -container!.frame.width)
    fromView.transform = getSlideTransform(toView, offset: 0.0)
    container!.addSubview(toView)
    container!.addSubview(fromView)


    let duration = self.transitionDuration(transitionContext)

    UIView.animateWithDuration(duration, delay: 0.0, usingSpringWithDamping: 0.9, initialSpringVelocity: 0.8, options: [], animations: {

        toView.transform = CGAffineTransformIdentity
        fromView.transform = self.getSlideTransform(fromView, offset: fromView.frame.width+100)
        }, completion: { finished in

            transitionContext.completeTransition(true)
    })
}


private func getSlideTransform(view: UIView, offset: CGFloat) -> CGAffineTransform {

    let size = view.frame.size
    var offSetTransform = CGAffineTransformMakeTranslation(offset, 0)
    offSetTransform = CGAffineTransformScale(offSetTransform, 0.9, 0.9)

    return offSetTransform
}

誰かが今何を試すべきかのヒントを教えてもらえますか? 私はアイデアがなく、私がチェックしたすべてのトピックがiOSの1つのバージョンの問題を解決し、他のバージョンをクラッシュさせると言ったので:/

4

1 に答える 1