2017-09-19 13 views
0

私は2つのView ControllerとNavigation Controllerを持っています。画面がクリックされると、第1のVCは第2のVCに続き、第1のVCに戻るための巻き戻し用の戻るボタンがある。Segueアニメーションが完全に機能していない

私はセグの縦型アニメーションが気に入らなかったので、いくつかの助けを借りてカスタムアニメーションを作成しました。

第1のVCは、右から左にスライドするアニメーションと大きく機能します。しかし、それが完了すると、2番目のVCは巻き戻したくない(2番目のVCは左から右に移動する必要があります)。 TestApp.HomeViewControllerに0x7fce2082b000:UINavigationControllerを提示しようとしています。ビューウィンドウ階層にない0x7fce20410030

私はこの警告..

警告を得ますか!

また、最初のVCセグからスクリプトを取得すると、適切なアニメーションで2番目のVCから巻き戻すことができます。

ここseguesためのコードです:右左アニメーション

右アニメーション

let dst = self.destination 
    let src = self.source 

    src.view.superview?.insertSubview(dst.view, at: 0) 

    UIView.animate(withDuration: 0.25, delay: 0.0, options: UIViewAnimationOptions.curveEaseInOut, animations: { 
     src.view.transform = CGAffineTransform(translationX: -src.view.frame.size.width, y: 0) 
    }, completion: { success in 
     src.dismiss(animated: false, completion: nil) 
    }) 

に左

let dst = self.destination 
    let src = self.source 

    let containerView = src.view.superview 

    dst.view.transform = CGAffineTransform(translationX: src.view.frame.size.width, y: 0) 

    containerView?.addSubview(dst.view) 

    UIView.animate(withDuration: 0.25, delay: 0.0, options: UIViewAnimationOptions.curveEaseInOut, animations: { 
     dst.view.transform = CGAffineTransform(translationX: 0, y: 0) 
    }, completion: { success in 
     src.present(dst, animated: false, completion: nil) 
    }) 

第一VC

@IBAction func performSegue(_ sender: Any) { 

    if shouldPerformSegue(withIdentifier: "segue", sender: Any?.self) { 

     performSegue(withIdentifier: "segue", sender: nil) 
    } 
} 

@IBAction func unwindToHomeView(segue: UIStoryboardSegue) { 

} 

override func unwind(for unwindSegue: UIStoryboardSegue, towardsViewController subsequentVC: UIViewController) { 
    let segue = SegueFromLeft(identifier: unwindSegue.identifier, source: unwindSegue.source, destination: unwindSegue.destination) 
    segue.perform() 
} 

すべてのヘルプは次のようになりは、大いに感謝するated。

+0

..だから私はアニメーションを廃止しました。私のアニメーションの解決策はかなり簡単でした。ナビゲータの位置を切り替えるだけで、最初のビューコントローラとして持っていれば、このトリックができました。アニメーションの固定または問題のプッシュ。 –

+0

私の解決策を落とすべきかどうかは分かりません。それは私の特定の質問に本当に役立つものではないからです。 –

答えて

0

私のソリューションでは、実際には「カスタム」アニメーションを使用せずに、VC1に接続された初期コントローラとしてナビゲーションコントローラを移動するだけで問題を解決しました。

そこから私は次のビュー(VC2)にプッシュし、巻き戻しセグを使用して(VC1に)戻った。

プッシュするための基本コード:

let vcName = "Main" 
let viewController = storyboard?.instantiateViewController(withIdentifier: vcName) 
self.navigationController?.pushViewController(viewController!, animated: true) 
1

leftcontrolを明示的に処理する必要がないナビゲーションコントローラーにviewcontrollerを単にプッシュすることができます。 VC1でnavigationController?.pushViewController(VC2, animated: true)は、単純にVC2を右から左にアニメーションします。便利な戻るボタンを使用すると、VC1を左から右にアニメーション表示することができます。

+0

VC2にカスタムの戻るボタンがあれば、ポップ機能を使用するだけですか? –

+0

カスタムボタンがある場合、ポップアップ機能を起動する必要がありますが、自動的にVCをポップしません。 'navigationController?.popViewController(animated:true)'ボタンのアクションで、これは現在のvcをポップします。 –

+0

あなたのコードを使用してエラーが発生しました。ビューコントローラタイプを変換できないことがあります。そこで、私はこれを試しました: 'let vcName =" main "' 'let viewController = storyboard?.instantiateViewController(withIdentifier:vcName)' 'self.navigationController?.pushViewController(viewController!、animated:true' ..私はかなり確信しています過去に同様のコードを使用しましたが、これはまだ機能しませんでした。 –

関連する問題