从手势触发动画不工作在PageViewController的子视图

问题描述:

我使用THIS LIB按钮,现在我有一个viewcontroller,它有一个容器视图,这个容器视图嵌入(segue)一个PageViewController,第二页(这是另一个ViewController)在这个PageViewController中有BFPaperButton(当onTap手势时有涟漪动画)。动画在这个设置中不起作用,但是如果要将第2页的ViewController设置为Is Initial View Controller那么动画完美地工作,这里发生了什么?从手势触发动画不工作在PageViewController的子视图

EDIT

我进一步分离出的问题,似乎使用PageViewController并返回包含按钮中的PageViewController的数据源代表方法之一的视图控制器时这只发生,

和它似乎原因是绝对的PageViewController,它似乎阻止了一些gesturerecognizers或延迟他们的子视图,需要找出如何解决它。

+0

我已经解决了这个问题并想回答问题 – Bhargav

+0

看来你有一个pr与你的代码相关。但是,除非我们有[可以重现问题的代码或信息](http://stackoverflow.com/help/mcve),否则我们无法提供帮助。否则,我们只是盲目猜测。请注意,解决您的问题不足以重新打开它 - 您必须实际提供MCVE。 –

+0

@Kyll我已经解决了这个问题,投票重新打开这个问题,以便我可以回答它:) – Bhargav

当处理某些类型的父视图时,您描述的效果非常普遍,这会延迟其子视图的内容接触。解决方案通常与设置父视图的属性一样简单:delaysContentTouches

我会记住这个,因为9次出10,这是罪魁祸首。

但是,在UIPageViewController的情况下,您所看到的是默认行为,它不公开该属性的的默认行为。一个丑陋但有效的方法来解决这个问题是挖掘UIPageViewController的子视图,直到你找到一个有UIGestureRecognizers,并设置delaysTouchesBegan = NO

您可以通过简单地运行此代码初始化你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; 
    } 
} 

之后做到这一点这里是一个快速拼凑斯威夫特版本,如果你喜欢:

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回答, for this issue