UIScrollView编程对我来说似乎是最难的任务之一:(
我在UIScrollView中有子视图 我想让子视图先触摸事件(并拖动) 当子视图认为它应该放弃触摸并且应该开始滚动时,它应该能够告诉scrollView。
我已尝试使用touchesShouldCancelInContentView,但只有当scrollView认为用户实际想要“滚动”时才调用此方法。
我需要控制何时取消子视图的触摸事件而不依赖于内部uiscrollview的实现。
到目前为止,我最好的策略是
子类ScrollView
- (void) touchesBegan: (NSSet *) touches withEvent: (UIEvent *) event
{
SYSLOG(LOG_DEBUG, "MyScrollView touchesBegan");
if (!self.dragging && self.isSubviewTouchable)
[self.nextResponder touchesBegan: touches withEvent:event];
[super touchesBegan: touches withEvent: event];
}
并从scrollView的子视图
当子视图需要释放触摸并让scrollView接受触摸事件时。
self.myScrollView.isSubviewTouchable = false;
[self touchesEnded: touches withEvent: event];
在scrollView的委托类中,我重新设置了bool值。
- (void) scrollViewDidEndDecelerating:(UIScrollView *)scrollView
{
self.myScrollView.isSubviewTouchable = true;
}
问题是,从子视图调用touchesEnded实际上并没有释放它看起来的触摸事件。(即使在touchesEnded调用之后,子视图仍然被拖动) 此外,我没有看到scrollView在touchesEnded调用之后得到任何触摸事件,我希望它会。
有什么想法吗?
谢谢
答案 0 :(得分:0)
我曾经尝试过使用PanGesture来解决这个问题。对于您想要可拖动的所有子视图,您可以添加UIPanGestureRegognizer并在其选择器中执行您想要执行的任何操作。即使在ScrollView中也能很好地工作。
UIPanGestureRecognizer *panGesture = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(doSomething:)];
[panGesture setDelegate:self];
[subviewtoMove addGestureRecognizer:panGesture];