将触摸从 uiview 转移到 uiscrollview
Transfer touches from uiview to uiscrollview
我在 UIView(红色)中有一个 UIScrollview(带图像)。
UIView - {0,0, 320, 236} UIScrollview - {0, 8, 300, 220}
在我的 uiview 中,我得到了触摸。
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{}
我需要将触摸从 UIView 转移到 UIScrollview。 (例如,如果用户从 uiview 的右侧向左滑动,uiscrollview 应该与用户触摸同步向左滚动)。我可以知道怎么做吗?
想法是在 UIView 中获取对 scrollView 的引用,计算 x 触摸增量并相应地调整 scrollView 的 contentOffset 属性。
因此,在您的 UIView 中 class:
@implementation MyView{
CGPoint _startPosition;
CGPoint _previousPosition;
}
在你的
中初始化以上变量
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
UITouch *touch = [touches anyObject];
_startPosition = [touch locationInView:self];
_previousPosition = _startPosition;
}
然后在你的touchesMoved:
-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event{
UITouch *touch = [touches anyObject];
CGPoint currentPosition = [touch locationInView:self.scrollView];
if(!CGPointEqualToPoint(_previousPosition, _startPosition)){
CGFloat deltaX = _previousPosition.x-currentPosition.x;
[UIView animateWithDuration:0.1 animations:^{
//
self.scrollView.contentOffset = CGPointMake(self.scrollView.contentOffset.x +
deltaX, self.scrollView.contentOffset.y);
}];
}
_previousPosition = currentPosition;
}
在动画块中调整scrollView.contentOffset使滚动流畅。
Link 到工作项目:https://github.com/sliaquat/stack_overlfow_answer_28036976
我在 UIView(红色)中有一个 UIScrollview(带图像)。
UIView - {0,0, 320, 236} UIScrollview - {0, 8, 300, 220}
在我的 uiview 中,我得到了触摸。
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{}
我需要将触摸从 UIView 转移到 UIScrollview。 (例如,如果用户从 uiview 的右侧向左滑动,uiscrollview 应该与用户触摸同步向左滚动)。我可以知道怎么做吗?
想法是在 UIView 中获取对 scrollView 的引用,计算 x 触摸增量并相应地调整 scrollView 的 contentOffset 属性。
因此,在您的 UIView 中 class:
@implementation MyView{
CGPoint _startPosition;
CGPoint _previousPosition;
}
在你的
中初始化以上变量- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
UITouch *touch = [touches anyObject];
_startPosition = [touch locationInView:self];
_previousPosition = _startPosition;
}
然后在你的touchesMoved:
-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event{
UITouch *touch = [touches anyObject];
CGPoint currentPosition = [touch locationInView:self.scrollView];
if(!CGPointEqualToPoint(_previousPosition, _startPosition)){
CGFloat deltaX = _previousPosition.x-currentPosition.x;
[UIView animateWithDuration:0.1 animations:^{
//
self.scrollView.contentOffset = CGPointMake(self.scrollView.contentOffset.x +
deltaX, self.scrollView.contentOffset.y);
}];
}
_previousPosition = currentPosition;
}
在动画块中调整scrollView.contentOffset使滚动流畅。
Link 到工作项目:https://github.com/sliaquat/stack_overlfow_answer_28036976