我有一个主 UIView,其中包含一个滚动视图。我已经使用以下代码为 4 种类型的滑动为主视图设置了 UIGestureRecognizer:
UISwipeGestureRecognizer *swipeUpRecognizer = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(upCommand)];
[swipeUpRecognizer setDirection:(UISwipeGestureRecognizerDirectionUp)];
[mainGameView addGestureRecognizer:swipeUpRecognizer];
... // Done 4 times for each direction
当我禁用滚动视图上的滚动时,此代码效果很好(我可以在屏幕上的任何位置滑动,相关操作按预期执行)。但是,我想添加功能,以便如果我在滚动视图上触摸两根手指,我可以像滚动视图通常那样来回平移。我尝试向滚动视图添加手势识别器以检测两个手指何时平移:
- (void)viewDidLoad
{
UIPanGestureRecognizer *panGestureRecognizer = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(recognizePan)];
panGestureRecognizer.minimumNumberOfTouches = 2;
panGestureRecognizer.maximumNumberOfTouches = 2;
[scrollView addGestureRecognizer:panGestureRecognizer];
}
- (void)recognizePan
{
[gameScrollView setScrollEnabled:YES];
}
我将其与以下方法结合使用,以在抬起手指后再次禁用滚动:
- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate
{
[gameScrollView setScrollEnabled:NO];
}
这种工作,但不是我想要的方式。当我在滚动视图上拖动两个手指时,滚动将设置为启用,但我不能使用这两个手指滚动。我首先需要抬起两根手指,然后才能用一根手指滚动(两根手指不起作用)。当我抬起可以滚动滚动视图的单根手指时,滚动被禁用,如scrollViewDidEndDragging
.
显然,这种类型的滚动对用户来说不是很友好,但我似乎找不到设置滚动视图的方法,所以它只有在两根手指在滚动视图上拖动时才会滚动。感谢您提前提供任何帮助。
~ 17 岁的业余 iOS 开发者和手势新手
编辑:根据这个问题的建议之一,我尝试实现 UISubView 的子类来覆盖默认的 touchesBegan 方法,但我无法让它工作。
自定义滚动视图.h:
@interface CustomScrollView : UIScrollView
{
}
@end
自定义滚动视图.m:
#import "CustomScrollView.h"
@implementation CustomScrollView
- (id)initWithFrame:(CGRect)frame
{
return [super initWithFrame:frame];
}
- (void) touchesBegan: (NSSet *) touches withEvent: (UIEvent *) event
{
// What goes here so that The action it can be called from the ViewController.h
}
@end
视图控制器.h:
#import <UIKit/UIKit.h>
@class CustomScrollView;
@interface ViewController : UIViewController <UIScrollViewDelegate>
{
CustomScrollView *scrollView;
}
@end
视图控制器.m:
- (void) touchesEnded: (NSSet *) touches withEvent: (UIEvent *) event
{
// What goes here?
}