2017-09-19 9 views
0

그래서 View Controller와 Navigation Controller가 2 대 있습니다. 화면을 클릭하면 첫 번째 VC가 두 번째 VC와 연결되고 첫 번째 VC로 돌아가려면 세그 (segue)를위한 뒤로 버튼이 있습니다.Segue 애니메이션이 제대로 작동하지 않습니다.

저는 각자의 수직 애니메이션이 싫었습니다. 그래서 약간의 도움으로 맞춤 애니메이션을 만들었습니다.

첫 번째 VC는 오른쪽에서 왼쪽으로 움직이는 애니메이션과 잘 작동합니다. 그러나 이것이 끝나면 2 차 벤처 캐피털은 긴장을 풀고 싶지 않습니다 (두 번째 VC는 왼쪽에서 오른쪽으로 진행해야합니다).

나는이 경고를받을 수 있나요 ..

경고 : TestApp.HomeViewController에 0x7fce2082b000 : UINavigationController가를 제시하는 시도 누구의보기 창 계층 구조에없는 0x7fce20410030!

또한 첫 번째 VC Segue에서 스크립트를 가져 오면 두 번째 VC에서 적절한 애니메이션을 풀 수 있습니다.

1 VC 마우스 오른쪽 애니메이션에 왼쪽 왼쪽 애니메이션

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) 
    }) 

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) 
    }) 

어떤 도움이 될 것

@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() 
} 

오른쪽에 : 여기

은 segues에 대한 코드입니다 대단히 감사하다. ated.

+0

그래서 .. 나는 멀리 애니메이션했다. 내 애니메이션의 솔루션은 상당히 간단했습니다. 네비게이터의 위치를 ​​바꿔서 초기 뷰 컨트롤러로 사용하는 것이 트릭을 만들었습니다. 애니메이션이나 푸시 문제 수정. –

+0

내 구체적인 질문에 대한 답을 얻지 못하기 때문에 내 솔루션을 내려야할지 모르겠습니다. –

답변

0

내 솔루션의 경우 실제로 어떤 "사용자 지정"애니메이션을 사용하지 않고 VC1에 연결된 초기 컨트롤러로 내비게이션 컨트롤러를 이동하여 대부분의 문제를 해결했습니다.

거기에서 나는 다음보기 (VC2)로 밀어 넣었고, 풀린 각반을 사용하여 (VC1로) 돌아갔습니다. 밀어

Basic 코드 :

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

왼쪽 컨트롤러를 명시 적으로 처리 할 필요가없는 탐색 컨트롤러에 viewcontroller를 간단히 푸시 할 수 있습니다. VC1에서 navigationController?.pushViewController(VC2, animated: true)은 VC2를 오른쪽에서 왼쪽으로 움직이게 할 것이고, 편리한 뒤로 버튼은 VC2를 왼쪽에서 오른쪽으로 움직이게하는 데 사용될 수 있습니다.

+0

VC2에 맞춤형 뒤로 버튼이 있으면 팝업 기능을 사용합니까? –

+0

사용자 정의 버튼이있는 경우 팝 기능을 트리거해야합니다. 자동으로 VC를 팝하지 않습니다. 'navigationController? .popViewController (animated : true) '버튼을 누르면 현재의 vc가 pop됩니다. –

+0

그것은보기 컨트롤러 유형을 변환 할 수없는 것에 대한 귀하의 코드를 사용하여 오류가 발생했습니다. 그래서 나는 이것을 시도했다 :'let vcName = "main"''let viewController = storyboard? .instantiateViewController (withIdentifier : vcName)''self.navigationController? .pushViewController (viewController!, animated : true' .. 나는 꽤 확신한다. 과거에는 비슷한 코드가 사용되었지만 여전히 작동하지 않았습니다. –