ストーリーを下にスワイプすると、ビューが縮小し始め、前のビューコントローラーがバックグラウンドで表示されるスナップチャットと同様のカスタムポップトランジションを作成しようとしています。
そんなに派手である必要はありません。縮小する円だけが必要です。このチュートリアルからいわば、プッシュされるView Controllerを「ズームアウト」するカスタムプッシュトランジションを作成することができました。ポップするには、基本的には逆にしたいだけです。カスタム プッシュ アニメーションのコードは基本的に次のとおりです。
func animateTransition(transitionContext: UIViewControllerContextTransitioning) {
//1
self.transitionContext = transitionContext
//2
var containerView = transitionContext.containerView()
var fromViewController = transitionContext.viewControllerForKey(UITransitionContextFromViewControllerKey) as! ViewController
var toViewController = transitionContext.viewControllerForKey(UITransitionContextToViewControllerKey) as! ViewController
var button = fromViewController.button
//3
containerView.addSubview(toViewController.view)
//4
var circleMaskPathInitial = UIBezierPath(ovalInRect: button.frame)
var extremePoint = CGPoint(x: button.center.x - 0, y: button.center.y - CGRectGetHeight(toViewController.view.bounds))
var radius = sqrt((extremePoint.x*extremePoint.x) + (extremePoint.y*extremePoint.y))
var circleMaskPathFinal = UIBezierPath(ovalInRect: CGRectInset(button.frame, -radius, -radius))
//5
var maskLayer = CAShapeLayer()
maskLayer.path = circleMaskPathFinal.CGPath
toViewController.view.layer.mask = maskLayer
//6
var maskLayerAnimation = CABasicAnimation(keyPath: "path")
maskLayerAnimation.fromValue = circleMaskPathInitial.CGPath
maskLayerAnimation.toValue = circleMaskPathFinal.CGPath
maskLayerAnimation.duration = self.transitionDuration(transitionContext)
maskLayerAnimation.delegate = self
maskLayer.addAnimation(maskLayerAnimation, forKey: "path")
}
私も同じようにポップできますが、ズームアウトではなくズームインするマスキングサークルが欲しい...
これまでのところ、これ(stackoverflow /questions/14411765/ios-invert-mask-in-drawrect)とこれ(stackoverflow /questions/16512761/calayer-with-transparent-hole-in-it)のように、マスクを反転しようとしました)、しかし、私は一生それを正しく機能させることはできません。
このgithub プロジェクトには、私が望むようなものが含まれているようですが、彼が行ったことを再現することはできませんでした。このスター ウォーズ プロジェクト (github /Yalantis/StarWars.iOS) も、私がやりたいこと (ダース ベイダーからアナキンに戻る) と似たようなことをしているようですが、実際には私がやりたいことではないスクリーンショットを使用していると思います。
また、トランジションがユーザーの指に追従し、ユーザーがどこを持ち上げても、単にジャンプして完了するのではなく、トランジションが続行されるようにできれば、非常にクールです。
奇妙なリンクで申し訳ありませんが、私はまだ 2 つ以上のリンクを配置するのに十分な評判がありません.
誰かの助けや意見をいただければ幸いです!!!
tl;dr: スナップ ストーリーを下にスワイプすると、スナップチャットのようなポップ トランジションが表示されます。