Christopher Nassar 正确地指出我应该使用UIPanGestureRecognizer
,所以我对它进行了一些实验。
我发现,如果您将 a 添加到UIPanGestureRecognizer
包含您的. 然后内置的平移手势识别器将以我想要的确切方式与您自己的配对工作!UIScrollView
UIScrollView
UIPanGestureRecognizer
水平和接近水平的滑动将被超级视图拾取,而所有其他垂直滑动将被UIPanGestureRecognizer
内置的(自定义)平移手势识别器拾取并使其滚动......UIScrollView
我想这UIScrollView
是这样设计的,因为默认行为是只有这些平移手势识别器中的一个触发,或者如果UIScrollView
从此UIPanGestureRecognizerDelegate
方法返回 YES 则同时触发:
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer;
然而,它似乎UIScrollView
有额外的逻辑来选择性地禁用(对于水平滑动)它自己的平移识别器,以防另一个存在。
也许这里有人知道更多细节。
所以总结一下,我的解决方案是在我的. 中添加一个UIPanGestureRecognizer
内部。(注意:作为子视图添加到该视图)viewDidLoad
UIViewController
UIScrollView
UIViewController
UIPanGestureRecognizer *myPanGestureRecognizer = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(handlePan:)];
[self.view addGestureRecognizer:myPanGestureRecognizer];
然后添加处理程序方法:
- (void)handlePan:(UIPanGestureRecognizer *)recognizer
{
NSLog(@"Swiped horizontally...");
}