2016-09-30 4 views
8

내가 조금 붙어있는 비정상적인 동작이 발생했습니다. 문제는 다음과 같습니다.버튼을 처음 누르는 순간 segue의 맞춤 애니메이션이 재생되지 않습니다.

저는 4 슬라이드를 실행 화면으로 사용하기 위해 BWWalkthrough 라이브러리를 사용하고 있습니다. 여기

let storyboard = UIStoryboard(name: "SlidesFlow", bundle: nil) 

let walkthrough = storyboard.instantiateViewController(withIdentifier: "SlidesView") as! BWWalkthroughViewController 
let page_zero = storyboard.instantiateViewController(withIdentifier: "page_1") 
let page_one = storyboard.instantiateViewController(withIdentifier: "page_2") 
let page_two = storyboard.instantiateViewController(withIdentifier: "page_3") 
let page_three = storyboard.instantiateViewController(withIdentifier: "page_4") 

walkthrough.delegate = self 
walkthrough.addViewController(page_zero) 
walkthrough.addViewController(page_one) 
walkthrough.addViewController(page_two) 
walkthrough.addViewController(page_three) 

모든 것이 의도 한대로 작동하므로 아무 문제 : 그래서 내 AppDelegate에에서 나는 viewcontrollers를 초기화 다음과 같은 코드가 있습니다. 의 ViewController의 page_three에 나는 사용자 정의 SEGUE 애니메이션 이제

class sentSegueFromRight: UIStoryboardSegue { 

override func perform() 
{ 
    let src = self.source as UIViewController 
    let dst = self.destination as UIViewController 

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

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

를 사용하여 다른 뷰 컨트롤러에 저를 리디렉션 버튼이 문제입니다, 나는 보통의 ViewController에있는 버튼 및 애니메이션 작업없이이 동일한 코드를 사용하는 경우 문제. 문제는 내 BWWalkthrough의 마지막 슬라이드에서 위에 정의 된 segue를 사용할 때입니다. 버튼을 처음봤을 때 나타나는 viewcontroller는 나타나지만 대응하는 애니메이션은 나타나지 않습니다. 분리 된 뷰 컨트롤러에 뷰 컨트롤러를 제시

내가 표준 애니메이션 버튼을 사용하는 경우 이

을 실망이다 : 그것을 닫고 버튼을 다시 애니메이션이 재생되지만 오류가 리턴됩니다에 테이핑 후 (내 사용자 정의 애니메이션 코드를 사용하지 않고) 오류가 발생하지 않고 기본 애니메이션이 재생됩니다.

이 문제에 대한 해결책을 찾지 못하는 것 같습니다. 아무도 이것과 같은 것을 우연히 발견하지 못했습니까?

답변

2

여기서 문제는 스크롤 뷰를 사용하여 추가 한 다양한 ViewController의 모든 뷰를 표시하는 BWWalkthrough 라이브러리에 있습니다.

마찬가지로 dst.view를 scrollview 시작 부분 (offset screenwidth, 0)에 추가 한 다음 offset (0,0)으로 변환합니다.

이 모든 것은 현재 보행 시선의 세 번째 화면 (오프셋 (화면 폭 * 3,0)) 에서처럼 화면이 꺼져 있습니다. 따라서 애니메이션을 보지 않고 segue가 끝나면 제시된 view controller를 직접 볼 수 있습니다.

이 문제를 해결하려면 segue의 dst.view를 스크롤보기의 수퍼 뷰에 추가하십시오. 즉 src.view.superview?.insertSubview(dst.view, aboveSubview: src.view) 대신에 src.view.superview?.superview?.insertSubview(dst.view, aboveSubview: src.view)을 쓰십시오. (보행 시선에서만 단층 문자를 사용한다고 가정하십시오)

다른 곳에서도 단편을 사용하려는 경우 segue에 유형 검사를 추가하여 src.view의 superview가 있는지 확인하십시오 scrollview가 있다면, dst.view를 scrollview의 superview에 추가하십시오.

+0

나를 지적 해 주셔서 감사합니다. 말된다. – Netra

관련 문제