我已经成功实现了一个UIScreenEdgePanGestureRecognizer,我的方法会被触发,但是" edge"尽管通过设置为UIRectEdgeBottom的边缘识别出正确的手势,手势识别器的属性仍永久设置为UIRectEdgeNone。
以下是我对识别器的设置:
- (void)setupEdgeRecogniser {
UIScreenEdgePanGestureRecognizer* r = [[UIScreenEdgePanGestureRecognizer alloc] initWithTarget:self action:@selector(swipeUpFromBottom:)];
r.minimumNumberOfTouches = 1;
r.maximumNumberOfTouches = 1;
r.delaysTouchesBegan = YES;
r.delegate = self;
[r setEdges:UIRectEdgeBottom];
}
这是我预期完全执行的方法:
- (void)swipeUpFromBottom:(UIScreenEdgePanGestureRecognizer*)gestureEvent {
// fault occurs here! gestureEvent.edges is always UIRectEdgeNone
if (gestureEvent.edges == UIRectEdgeBottom) {
// do some stuff
}
}
它很直接,除了我需要测试边缘属性以查看哪个边缘被识别,上面的示例仅演示了该问题。我的实际代码库在每个边缘检测到,然后我需要进一步分解它。
显然我可以通过触发不同的方法来解决这个问题,但在这种情况下我不愿意这样做。
有谁知道为什么这个属性没有设定我的预期?
提前感谢您的帮助。
答案 0 :(得分:4)
据我所知,尽管名称边缘,但必须将其设置为单个边缘。因此,无需检查哪个边缘被识别,因为只有从底部向上滑动时才会触发swipeUpFromBottom。如果将委托设置为self,则可以将另一个UIScreenEdgePanGestureRecognizer添加到视图,边缘设置为left,名为leftRecognizer,然后在委托方法中,您可以检查用户通过此方向滑动的方向。
-(BOOL)gestureRecognizerShouldBegin:(UIScreenEdgePanGestureRecognizer *)g
{
if (g == leftRecognizer) {
//swiped left.
} else if (g == r) {
//swiped down.
}
}