私は何をしようとしています左側から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. UITableView詳細ビューコントローラ
- 3. Yii2詳細ログ
- 4. ショート/詳細ボタン
- 5. UIMenuController setTargetRect詳細
- 6. GAE詳細ステータスページ
- 7. 詳細なドロップダウンリストコントロール
- 8. StreamWriterの詳細
- 9. 何か(詳細)
- 10. ステッチ詳細パラメータ
- 11. ダブルハッシング詳細
- 12. GameCenterの詳細
- 13. デリゲートの詳細
- 14. 詳細Hudsonテストレポート
- 15. 応答詳細
- 16. 詳細のアンダーレイチャート
- 17. カフカレプリケーションフラッシュオフセット詳細
- 18. マスター詳細ビューアプリケーション
- 19. 詳細テンプレートイベント
- 20. GridControl詳細グリッド
- 21. カスタムナビゲーションバー詳細NavigationController
- 22. INADDR_ANY詳細
- 23. のMapViewショーオーバーレイ詳細
- 24. esxi詳細情報
- 25. Pythonユニットテストの詳細
- 26. FUSE - 詳細なドキュメント
- 27. 詳細ブロックのLOV
- 28. テーブル詳細のブートストラップドロップダウン
- 29. リリースノートの詳細Artifactory
- 30. Joomla!JRequest :: getVar詳細