UIScrollView 中的触摸交互
Posted
技术标签:
【中文标题】UIScrollView 中的触摸交互【英文标题】:Touch Interaction in a UIScrollView 【发布时间】:2013-05-17 10:37:48 【问题描述】:有一些与此类似的帖子,但我无法将其他响应调整为我的代码。在我的scrollview
中使用touchesBegan
、touchesMoved
和touchesEnded
方法时遇到问题。
我目前有一个大的scrollview
(3072 x 2304)。我有一个 UIImageView
作为 subview
并希望检测到任何一个的触摸(这并不重要,因为它会对我产生相同的结果)。
这是我目前的处理方法:
//Set scrollview to size of image
self.myScrollView.contentSize = CGSizeMake(3072, 2304);
//Load image in big rect
UIImageView *myImageView = [[UIImageView alloc] initWithFrame:CGRectMake(0,0, 3072, 2304)];
//set image to pic in bundle
myImageView.image = [UIImage imageNamed:@"dot.jpg"];
//make imageview subview of scrollview
[self.myScrollView addSubview: myImageView];
//Making subview for touches
CGRect frame = CGRectMake(0, 0, 3072, 2304);
touchView = [[UIScrollView alloc] initWithFrame:frame];
[self.myScrollView addSubview: touchView];
//Allow for 2 touches to move screen
for (UIGestureRecognizer *gestureRecognizer in myScrollView.gestureRecognizers)
if ([gestureRecognizer isKindOfClass:[UIPanGestureRecognizer class]])
UIPanGestureRecognizer *panGR = (UIPanGestureRecognizer *) gestureRecognizer;
panGR.minimumNumberOfTouches = 2;
注意:
建议使用手势识别器的方法并不理想。 据我所知,除了touchesMoved
,别无选择;实现这一点的唯一可行方法是子类化 UIScrollView,但这并没有给我带来任何乐趣。
【问题讨论】:
【参考方案1】:尝试使用这个。你知道imageview的用户交互默认是false
所以你需要设置它true
。
myImageView.userInteractionEnabled = YES;
您需要在 viewDidLoad 中为滚动视图添加手势
- (void)viewDidLoad
[super viewDidLoad];
// Do any additional setup after loading the view from its nib.
UITapGestureRecognizer *gestureRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleGesture:)];
gestureRecognizer.delegate = self;
[scrollView addGestureRecognizer:gestureRecognizer];
-(void) handleGesture:(UIGestureRecognizer *) sender
//------- do here
【讨论】:
我不太明白这一点。当然 UITapGestureRecognizer 只能检测单点触摸事件?我还需要能够跟踪触摸运动。 在这种情况下,您还需要将该手势添加到滚动视图中 这个方法我已经试过了。问题是 UITapGestureRecognizer 在触地事件后无法检测到移动 - 它的行为类似于 touchesBegan。我需要一些行为类似于 touchesMoved 的东西。 据我所知,如果是子视图,您将无法在滚动视图上获取事件。在这种情况下,您需要添加 getture。 我的目标是创建处理触摸的 UIScrollView 的子视图。 touchesBegan/touchesEnded 方法仅适用于 UIViews。所以这是我要纠正的一个错误。以上是关于UIScrollView 中的触摸交互的主要内容,如果未能解决你的问题,请参考以下文章
自动滚动 UIScrollView 以适应原生 iOS Mail.app 中的内容