在iPad上运行的iPhone应用程序无法识别UIScreenEdgePanGestureRecognizer

时间:2015-01-09 17:36:56

标签: ios uinavigationcontroller uigesturerecognizer

我有一个仅限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 :; layer =>

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

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

1 个答案:

答案 0 :(得分:0)

如果使用视图控制器和导航控制器正确创建故事板,则默认情况下创建动画y(Edge Left滑动以展开)。但如果不是你的情况,你可以尝试使用UnwindSegue或dismiss函数。但我不知道“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];