gpt4 book ai didi

objective-c - 在 ios6 中,将 pageViewController 的 gestureRecognizers 委托(delegate)设置为 viewController 会导致崩溃

转载 作者:可可西里 更新时间:2023-11-01 03:05:27 25 4
gpt4 key购买 nike

这在 ios6 中才开始发生,但如果你使用页面 View Controller 模板开始一个新项目。然后在

PCRootViewControlle::viewDidLoad()

将这些行添加到方法的底部。

for (UIGestureRecognizer *gR in self.pageViewController.gestureRecognizers)
{
gR.delegate = self;
}

您需要分配 viewController 以使其符合 UIGestureRecognizerDelegate 并实现该方法

-(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch (UITouch *)touch
{
return YES;
}

现在,如果您运行该应用程序并尝试将页面翻到边界之外,即转到一月并尝试返回

  • (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerBeforeViewController:(UIViewController *)viewController

返回零。

然后该应用程序将崩溃。

这在 ios5 中没有发生。我需要将 gestureRecognizer 委托(delegate)分配给我的 viewController,因为我并不总是希望 pageViewController 处理触摸事件。

有没有其他人遇到过这种情况或指出我做错了什么?

非常感谢斯图尔特。

最佳答案

终于找到了解决我的问题的方法,这个问题让我很伤心,所以希望这可以帮助其他人。

问题是如果您将 pageViewControllers 委托(delegate)设置为您的 viewController

for (UIGestureRecognizer *gR in self.pageController.view.gestureRecognizers) 
{
if ([gR isKindOfClass:[UITapGestureRecognizer class]])
{
gR.enabled = NO;
}
else if ([gR isKindOfClass:[UIPanGestureRecognizer class]])
{
gR.delegate = self;
}
}

然后从

返回 nil
pageViewController:viewControllerAfterViewController:

会崩溃!!仅限 iOS6!!

我的问题是我需要设置 gestureRecognisers 的委托(delegate),因为我需要在某些情况下拦截 panGesture,即不允许用户翻页,因为那里有一些按钮而触摸它的某些部分。

解决方案是把逻辑从

pageViewController:viewControllerAfterViewController: 

进入

gestureRecognizer:shouldReceiveTouch:

因为只要我们从那里返回 NO 那么它就不会继续调用

pageViewController:viewControllerAfterViewController:

因此无需返回 nil 并导致崩溃。

但是,这在序列的第一页和最后一页上不起作用。例如在第一页上,您希望允许页面向前翻但不能向后翻。所以我考虑查看传入的 GestureRecogniser,将其转换为 PanGesture,然后检查其速度,如果速度表示返回 (> 0.0f),则返回 NO。这听起来不错,但速度始终为零。

然后我在 GestureRecognizer 委托(delegate)上发现了一个非常有用的小函数,叫做:

gestureRecognizerShouldBegin:gestureRecognizer

这个函数在

之后被调用
gestureRecognizer:shouldReceiveTouch:

但这次手势的速度符合我的预期,所以我可以检查速度,如果第一页 > 0.0f,则只返回 YES

关于objective-c - 在 ios6 中,将 pageViewController 的 gestureRecognizers 委托(delegate)设置为 viewController 会导致崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12561336/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com