我需要从UIScrollView获取触摸位置。但是当我为我的scrollview创建一个子类时:
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{
NSArray *touchesArray = [touches allObjects];
UITouch *touch = (UITouch *)[touchesArray objectAtIndex:0];
CGPoint point = [touch locationInView:self];
self.position = point;}
并不总是调用函数touchesBegan
。
如果我快速滑动,则永远不会调用touchesBegan
,而是直接调用scrollViewDidScroll
。
我无法使用UIGesture (UITapGestureRecognizer, ... )
,因为用户不会点按或滑动。
是否有其他方法可以从UIScrollView获取职位?
编辑:
谢谢你:https://stackoverflow.com/a/15763450/1752843
UIScrollView子类:
- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event{
self.position = point;
return self;
}
答案 0 :(得分:7)
要检测scrollview中的触摸位置,请尝试使用此代码
UITapGestureRecognizer *singleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(singleTapGestureCaptured:)];
[scrollView addGestureRecognizer:singleTap];
- (void)singleTapGestureCaptured:(UITapGestureRecognizer *)gesture
{
CGPoint touchPoint=[gesture locationInView:scrollView];
}
答案 1 :(得分:2)
我在SO中看到an answer,我认为它可以解决您的问题。似乎SDK不再将触摸处理方法传递给UIScrollView子类。因此,您应该执行hitTest:
将触摸传递给您的子类。
有关详细信息,请参阅答案。
答案 2 :(得分:0)
您也可以使用scrollview.panGestureRecognizer
的{{1}}方法获取视图中触摸的坐标。根据您的要求,这可以是任何locationInView
的委托方法。
答案 3 :(得分:0)
scrollView.delaysContentTouches = NO;
它将使得touchesBegan和其他触摸事件将在scrollViewDidScroll之前被触发。
hitTest是一个黑客攻击,不应该是首选解决方案。