2017-05-06 20 views
0

我試圖採取的UIViewController使用下面的代碼預覽(PEEK &流行的3D觸摸):爲previewingGestureRecognizerForFailureRelationship設置委託拋出一個異常

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

有沒有在協議UIViewControllerPreviewingpreviewingGestureRecognizerForFailureRelationship一個屬性,它實際上是UIGestureRecognizer的一個實例,讓我困惑不已。

正如doc說:

使用通過實施它委託對象符合所述UIGestureRecognizerDelegate協議此手勢識別。

但是,當我設置爲delegatepreviewingGestureRecognizerForFailureRelationship,發生

context.previewingGestureRecognizerForFailureRelationship.delegate = self; 

A錯誤:

***終止應用程序由於未捕獲的異常 'NSInvalidArgumentException',理由是:「你無法更改UIViewControllerPreviewing失敗關係手勢識別器的代表'

那麼如何使用這個屬性呢?

回答

0

似乎我對此已經晚了幾個月,但它仍然可以幫助未來的某個人。

當您在視圖控制器上調用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) 
相關問題