我正在使用THIS LIB按钮,现在我有一个viewcontroller,它有一个容器视图,这个容器视图嵌入(segue)一个PageViewController,第二个页面(这是另一个ViewController)在这个PageViewController中有BFPaperButton(在onTap手势时具有波纹动画)。动画在这个设置中不起作用,但如果要将第二页的ViewController设为Is Initial View Controller
那么动画效果很好,这里发生了什么?
修改
我进一步隔离了这个问题,似乎这只发生在使用PageViewController并在PageViewController的一个数据源委托方法中返回包含该按钮的ViewController时,
并且看起来原因绝对是PageViewController,它似乎阻止了一些手势识别器或者延迟它们的子视图,需要找出如何解决它。
答案 0 :(得分:0)
在处理延迟其子视图内容触摸的某些类型的父视图时,您描述的效果非常常见。解决方案通常与设置父视图的属性一样简单:delaysContentTouches
。
我会记得这个,因为10次中有9次,这是罪魁祸首。
但是,对于UIPageViewController,您看到的是 UIQueuingScrollView
的默认行为,它不会公开该属性。解决这个问题的一种丑陋但有效的方法是深入了解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;
}
}
如果你愿意的话,这里有一个快速打好的Swift版本:
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
回答