私は何をしようとしています左側からViewControllerを押すのカスタムアニメーションです。 私は自分のカスタムトランジションデリゲートを作成しました。私はカスタムアニメーションを提供していますが、すべて正常に動作します(新しいビューは左側からスライドします)。 唯一の問題は、iOSのプッシュアニメーションは、右側からビューをスライドさせることだけではないことです。隠れているVCも、VCが押し込まれているのと同じ方向にわずかに動いています。また、ナビゲーションバーが点滅します。私はもちろんパラメータが何であるべきかを推測することでこの振る舞いを模倣しようとすることができます(たとえば、VCがどのくらい隠れているかは別のiPhoneで動きます)が、値をどこかで見つけることは可能でしょうか? 大変助かりました。PushViewController詳細?
0
A
答えて
0
私はあなたの「From」に続いてオブジェクト
class CustomHorizontalSlideTransition: NSObject, UIViewControllerAnimatedTransitioning {
var operation: UINavigationControllerOperation = .Push
convenience init(operation: UINavigationControllerOperation) {
self.init()
self.operation = operation
}
func transitionDuration(transitionContext: UIViewControllerContextTransitioning?) -> NSTimeInterval {
return 0.5
}
func animateTransition(transitionContext: UIViewControllerContextTransitioning) {
let containerView = transitionContext.containerView()
let disappearingVC = transitionContext.viewControllerForKey(UITransitionContextFromViewControllerKey)!
let appearingVC = transitionContext.viewControllerForKey(UITransitionContextToViewControllerKey)!
let bounds = UIScreen.mainScreen().bounds
if self.operation == .Push {
appearingVC.view.frame = CGRectOffset(bounds, -bounds.size.height, 0)
containerView!.addSubview(disappearingVC.view)
containerView!.addSubview(appearingVC.view)
} else {
appearingVC.view.frame = bounds
disappearingVC.view.frame = bounds
containerView!.addSubview(appearingVC.view)
containerView!.addSubview(disappearingVC.view)
}
UIView.animateWithDuration(transitionDuration(transitionContext),
delay: 0.0,
options: UIViewAnimationOptions.CurveEaseInOut,
animations: {() -> Void in
if self.operation == .Push {
appearingVC.view.frame = bounds
} else {
disappearingVC.view.frame = CGRectOffset(bounds, -bounds.size.width, 0)
}
}) { (complete) -> Void in
transitionContext.completeTransition(true)
}
}
}
を遵守UIViewControllerAnimatedTransitioningプロトコルを作成し、ビュー・コントローラ「へ」、
override func viewDidAppear(animated: Bool) {
super.viewDidAppear(animated)
navigationController?.delegate = self
}
ViewDidAppearビューで自己にしnavigationControllerのデリゲートを設定します両方のビューコントローラは、transitionAnimatedTransition
デリゲートメソッドを提供し、アニメーションのプロトコル準拠のインスタンスを返すために以下をオーバーライドします
override func transitionAnimatedTransition(operation: UINavigationControllerOperation) -> UIViewControllerAnimatedTransitioning? {
return CustomHorizontalSlideTransition(operation: operation)
}
関連する問題
- 1. Crystal Reports詳細の詳細
- 2. 詳細
- 3. GameCenterの詳細
- 4. ステッチ詳細パラメータ
- 5. Yii2詳細ログ
- 6. 何か(詳細)
- 7. 詳細のアンダーレイチャート
- 8. ショート/詳細ボタン
- 9. C#詳細 - データバインディング
- 10. マスター詳細ビューアプリケーション
- 11. UITableView詳細ビューコントローラ
- 12. GridControl詳細グリッド
- 13. 詳細Hudsonテストレポート
- 14. コアデータ詳細ビューエラー
- 15. カフカレプリケーションフラッシュオフセット詳細
- 16. INADDR_ANY詳細
- 17. デリゲートの詳細
- 18. StreamWriterの詳細
- 19. 詳細テンプレートイベント
- 20. HKWorkoutActivityType詳細ドキュメント?
- 21. 詳細Symfony3 Profiler
- 22. GAE詳細ステータスページ
- 23. カスタムナビゲーションバー詳細NavigationController
- 24. 詳細なデータクエリ
- 25. UIMenuController setTargetRect詳細
- 26. 詳細なドロップダウンリストコントロール
- 27. ダブルハッシング詳細
- 28. MySQLの詳細
- 29. 応答詳細
- 30. 詳細テーブルのカスタムヘッダ