从手势触发动画不工作在PageViewController的子视图
我使用THIS LIB按钮,现在我有一个viewcontroller,它有一个容器视图,这个容器视图嵌入(segue)一个PageViewController,第二页(这是另一个ViewController)在这个PageViewController中有BFPaperButton(当onTap手势时有涟漪动画)。动画在这个设置中不起作用,但是如果要将第2页的ViewController设置为Is Initial View Controller
那么动画完美地工作,这里发生了什么?从手势触发动画不工作在PageViewController的子视图
EDIT
我进一步分离出的问题,似乎使用PageViewController并返回包含按钮中的PageViewController的数据源代表方法之一的视图控制器时这只发生,
和它似乎原因是绝对的PageViewController,它似乎阻止了一些gesturerecognizers或延迟他们的子视图,需要找出如何解决它。
当处理某些类型的父视图时,您描述的效果非常普遍,这会延迟其子视图的内容接触。解决方案通常与设置父视图的属性一样简单: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
我已经解决了这个问题并想回答问题 – Bhargav
看来你有一个pr与你的代码相关。但是,除非我们有[可以重现问题的代码或信息](http://stackoverflow.com/help/mcve),否则我们无法提供帮助。否则,我们只是盲目猜测。请注意,解决您的问题不足以重新打开它 - 您必须实际提供MCVE。 –
@Kyll我已经解决了这个问题,投票重新打开这个问题,以便我可以回答它:) – Bhargav