我有两个VC,它们都有一个uicollectionviews,其中一个(称之为VC1)我添加了一个
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];
}
现在,通过应用程序生命周期,用户可以从此VC1切换到另一个VC2。 在那种情况下,我遇到了崩溃,如果我加载应用程序并转到VC2并且从未点击过VC1,这种情况永远不会发生。因此,在失去宝贵的时间找出如何调试这个后,我在仪器中运行了僵尸并发现了这条线
[aRecognizer requireGestureRecognizerToFail:lpgr];
问题是什么,虽然这一行在
中viewdidload
VC1的,如果我从VC1移动到VC2,则会调用!!
我禁用了该段,我的代码工作正常,我只是不知道为什么会发生这种情况!
答案 0 :(得分: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];