2016-08-03 1 views
0

버튼에 THIS LIB을 사용하고 있습니다. 이제 컨테이너 뷰가있는 viewcontroller가 있습니다.이 컨테이너 뷰에는 PageViewController가 두 번째 페이지 (다른 ViewController)에는 BFPaperButton (onTap 제스처 일 때 리플 애니메이션이 있음)이 있습니다. 이 설정에서는 애니메이션이 작동하지 않지만 두 번째 페이지의 ViewController를 Is Initial View Controller으로 만들면 애니메이션이 완벽하게 작동합니다. 여기서 무슨 일이 일어나고 있습니까?제스처에서 트리거 된 애니메이션이 PageViewController의 하위 뷰에서 작동하지 않습니다.

내가 문제를 더 고립

편집,

과하는 PageViewController을 사용하고의 ViewController가 PageViewController의 데이터 소스 위임 방법 중 하나의 버튼을 포함하는 반환 할 때이는 일이 보인다 그 이유는 PageViewController가 가장 확실한 것으로 보입니다. 일부 제스처 인식자를 차단하거나 자식 뷰를 지연시키는 것으로 보입니다. 문제를 해결하는 방법을 찾아야합니다.

+0

나는 이것을 풀어서 질문에 대답하고 싶습니다 – Bhargav

+0

당신은 pr 코드를 작성하십시오. 그러나 우리가 [문제를 재현 할 수있는 코드 또는 정보가 없으면] 도움을 줄 수 없습니다 (http://stackoverflow.com/help/mcve). 그렇지 않으면, 우리는 단지 맹목적으로 추측하고 있습니다. 문제를 해결하면 다시 열 수 없다는 점에 유의하십시오. 실제로 MCVE를 제공해야합니다. –

+0

@Kyll @Kyll 이미 문제를 해결 했으므로 질문을 다시 열어 대답 할 수 있습니다 :) – Bhargav

답변

0

설명하는 효과는 하위 뷰의 내용 접촉을 지연시키는 특정 유형의 부모 뷰를 처리 할 때 매우 일반적입니다. 솔루션은 일반적으로 상위 뷰의 속성을 설정하는 것처럼 간단합니다 : delaysContentTouches.

저는 10 번 중 9 번, 이것이 범인이기 때문에 이것을 기억합니다.

그러나 UIPageViewController의 경우 기본 동작은 UIQueuingScrollView이며이 속성은 해당 속성을 노출하지 않습니다. 이 문제를 해결하기위한 추악하고도 효과적인 방법은 UIGestureRecognizers이 있고 delaysTouchesBegan = NO으로 설정 될 때까지 UIPageViewController의 하위보기를 파헤치는 것입니다. ,

let subViews: [UIView] = pageViewController.view.subviews 
var viewHierarchy: [UIView] = [pageViewController.view] 
viewHierarchy.appendContentsOf(subViews) 
var i = 0 
for viewToCheck in viewHierarchy { 
    viewToCheck.gestureRecognizers?.forEach { (recognizer) in 
     print("viewToCheck isa \'\(viewToCheck.self)\'") 
     for gestureRecognizer in viewToCheck.gestureRecognizers! { 
      print("\(i) gestureRecognizer: \(gestureRecognizer)") 
      i += 1 
      gestureRecognizer.delaysTouchesBegan = false 
      } 
    } 
} 

은 GitHub의 사용자 bfeher에 의해 답변 : 당신이 당신의 UIPageViewController

NSArray *subviews = self.pageViewController.view.subviews; 
NSArray *viewHierarchy = [@[self.pageViewController.view] arrayByAddingObjectsFromArray:subviews]; 
int i = 0; 
for (UIView *viewToCheck in viewHierarchy) { 
    for (UIGestureRecognizer *gestureRecognizer in viewToCheck.gestureRecognizers) { 
     NSLog(@"%d gestureRecognizer: %@", i++, gestureRecognizer); 
     gestureRecognizer.delaysTouchesBegan = NO; 
    } 
} 

를 초기화 한 후

당신은 여기에 당신이 선호하는 경우 신속 함께 스위프트 버전을 때렸다 단순히이 코드를 실행하여이 작업을 수행 할 수 for this issue

관련 문제