2014-03-30 112 views
1

我有兩個VC的,無論是舉辦uicollectionviews,在其中的一個(稱之爲VC1)我通過應用程序生命週期中,用戶可以從這個VC1到另一個VC2切換添加殭屍對象,requireGestureRecognizerToFail,爲什麼?

UILongPressGestureRecognizer *lpgr 
= [[UILongPressGestureRecognizer alloc] 
    initWithTarget:self action:@selector(handleLongPress:)]; 
lpgr.minimumPressDuration = .8; //seconds 
lpgr.delegate = self; 
[self.collectionView addGestureRecognizer:lpgr]; 
// Make the default gesture recognizer wait until the custom one fails. 
for (UIGestureRecognizer* aRecognizer in [self.collectionView gestureRecognizers]) { 
    if ([aRecognizer isKindOfClass:[UILongPressGestureRecognizer class]]) 
     [aRecognizer requireGestureRecognizerToFail:lpgr]; 
} 

現在。 在這種情況下,我得到一個崩潰,如果我加載應用程序,並去VC2,從來沒有擊中VC1這從來沒有發生。因此失去了寶貴的時間搞清楚如何調試這後,我跑了儀器的殭屍,發現該行

[aRecognizer requireGestureRecognizerToFail:lpgr]; 

是問題,雖然這條線是在

viewdidload 
VC1的

,如果我從VC1移動到VC2這被稱爲!

我禁用了該段,我的代碼工作正常,我只是不知道爲什麼會發生這種情況!

回答

0

您不應該創建一個依賴關係來自己對象。 由於您已經將手勢識別器lpgr添加到collectionview,因此在for循環中,可能會創建lpgr本身的錯誤依賴關係。

將其改寫成這樣。

// Make the default gesture recognizer wait until the custom one fails. 
for (UIGestureRecognizer* aRecognizer in [self.collectionView gestureRecognizers]) { 
    if ([aRecognizer isKindOfClass:[UILongPressGestureRecognizer class]]) 
     [aRecognizer requireGestureRecognizerToFail:lpgr]; 
} 

[self.collectionView addGestureRecognizer:lpgr];