【问题标题】:Setting delegate for previewingGestureRecognizerForFailureRelationship throws an exception为 previewingGestureRecognizerForFailureRelationship 设置委托会引发异常
【发布时间】:2017-05-06 07:31:44
【问题描述】:

我正在尝试使用以下代码采用 UIViewController 预览(Peek & Pop with 3D Touch):

id<UIViewControllerPreviewing> context = [self registerForPreviewingWithDelegate:self sourceView:self.imageView];

协议中有一个属性UIViewControllerPreviewingpreviewingGestureRecognizerForFailureRelationship,其实是UIGestureRecognizer的一个实例,让我很困惑。

正如doc所说:

通过为它实现一个符合 UIGestureRecognizerDelegate 协议的委托对象来使用这个手势识别器。

但是,当我将delegate 设置为previewingGestureRecognizerForFailureRelationship 时,

context.previewingGestureRecognizerForFailureRelationship.delegate = self;

发生错误:

*** 由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“您无法更改 UIViewControllerPreviewing 失败关系手势识别器的委托”

那么如何使用这个属性呢?

【问题讨论】:

    标签: ios objective-c cocoa-touch uikit 3dtouch


    【解决方案1】:

    似乎我在这方面迟了几个月,但它仍然可能对未来的人有所帮助。

    当您在视图控制器上调用registerForPreviewing 时,您会返回一个符合UIViewControllerPreviewing 协议的上下文对象。您可以存储对该上下文的 previewingGestureRecognizerForFailureRelationship 的引用,以在您的 UIGestureRecognizerDelegate 方法中使用,或用于要求其他手势失败。

    //When registering for previewing
    let previewingContext = self.registerForPreviewing(with delegate: self, sourceView: self.view)
    self.previewingGestureRecognizer = previewingContext. previewingGestureRecognizerForFailureRelationship
    
    //Requiring failure for another gesture to be recognized
    let longPressGesture = UILongPressGestureRecognizer(target: self.view, action: #selector(handleLongPress(_ :)))
    longPressGesture.require(toFail: self.previewingGestureRecognizer)
    self.view.addGestureRecognizer(longPressGesture)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-21
      • 1970-01-01
      相关资源
      最近更新 更多