【问题标题】:UIScreenEdgePanGestureRecognizer not recognized on iPhone app running on iPad在 iPad 上运行的 iPhone 应用程序上无法识别 UIScreenEdgePanGestureRecognizer
【发布时间】:2015-03-08 02:26:14
【问题描述】:

我有一个仅限 iPhone 的应用程序,它使用 UIScreenEdgePanGestureRecognizer 在 UINavigationController 中实现自定义交互式转换。在 UINavigationController 子类的 viewDidLoad 中创建并添加手势识别器如下:

UIScreenEdgePanGestureRecognizer* edgeRecognizer = [[UIScreenEdgePanGestureRecognizer alloc] initWithTarget:self action:@selector(pan:)];
edgeRecognizer.edges = UIRectEdgeLeft;
[self.view addGestureRecognizer:edgeRecognizer];

当应用程序在 iPad 上运行时,当我尝试滑动以从导航堆栈中弹出视图控制器时,应用程序中没有任何反应,并且如果我在位置左侧开始手势,我会得到以下控制台输出应用程序窗口是:

_UIApplicationHandleEventFromQueueEvent 中出现意外的 nil 窗口, _windowServerHitTestWindow: ;层=>

有谁知道这个问题的原因以及我如何/是否可以解决这个问题?到目前为止,我在文档中找不到任何表明边缘平移手势不应在兼容模式下运行的内容。我正在 iOS 8 中进行测试。

手势在模拟器中有效,但在设备上无效。

【问题讨论】:

  • 嘿,Darren,你有没有想过如何让 UIScreenEdgePanGestureRecognizer 为在 iPad 上运行的 iPhone 应用程序触发?即使在为 iOS 14 构建的 Xcode 12.4 中,它仍然对我不起作用……很想知道您是否找到了解决方法!谢谢!

标签: ios uinavigationcontroller uigesturerecognizer


【解决方案1】:

如果您使用默认创建的动画 y 的视图控制器和导航控制器正确创建故事板(边缘向左滑动以展开)。但如果不是您的情况,您可以尝试使用 UnwindSegue 或解除函数。但我不知道“pan:”方法是做什么的。

我在 Ipad 的一个应用程序中做到了,它正确调用了该函数:

- (void)viewDidLoad
{
    UIScreenEdgePanGestureRecognizer *leftEdgeGesture = [[UIScreenEdgePanGestureRecognizer alloc] initWithTarget:self
                                                                                                          action:@selector(openLeftSideBar)];
    leftEdgeGesture.edges = UIRectEdgeLeft;
}

- (void)openLeftSideBar
{
    //the code

}

在你的情况下,你可以调用 Unwind segue 到你想回滚的视图控制器,或者如果你想回滚的视图控制器就在当前视图控制器的后面,请使用这样的关闭函数:

[self dismissViewControllerAnimated:YES completion:nil];

【讨论】:

  • 我为导航控制器实现了自定义交互式转换,这就是为什么我必须添加自己的手势识别器来恢复滑动以导航回行为的原因。 pan 选择器将启动或更新交互式转换,但在这种情况下永远不会调用它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-12-04
  • 1970-01-01
  • 1970-01-01
  • 2015-02-14
  • 1970-01-01
  • 2014-06-24
  • 1970-01-01
相关资源
最近更新 更多