sam*_*tte 10 iphone uiscrollview
所以我想做的就是当用户触摸UIScrollView时播放声音.UIScrollViewDelegate具有scrollViewWillBeginDragging:方法,但它只在touchMoved上调用.我想让它在touchBegan上调用.
尝试touchesBegan:withEvent:但它没有任何接触.有人有线索吗?
Raj*_*071 18
改为使用Tap Gesture识别器:
UITapGestureRecognizer *recognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(touch)];
[recognizer setNumberOfTapsRequired:1];
[recognizer setNumberOfTouchesRequired:1];
[scrollView addGestureRecognizer:recognizer];
Run Code Online (Sandbox Code Playgroud)
要么
制作你的subClass UIScrollView 并实现所有
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{
// If not dragging, send event to next responder
if (!self.dragging){
[self.nextResponder touchesBegan: touches withEvent:event];
}
else{
[super touchesEnded: touches withEvent: event];
}
}
-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event{
// If not dragging, send event to next responder
if (!self.dragging){
[self.nextResponder touchesBegan: touches withEvent:event];
}
else{
[super touchesEnded: touches withEvent: event];
}
}
-(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event{
// If not dragging, send event to next responder
if (!self.dragging){
[self.nextResponder touchesBegan: touches withEvent:event];
}
else{
[super touchesEnded: touches withEvent: event];
}
}
Run Code Online (Sandbox Code Playgroud)
Roo*_*elt 13
改为使用Tap Gesture识别器:
UITapGestureRecognizer *recognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(touch)];
[recognizer setNumberOfTapsRequired:1];
[recognizer setNumberOfTouchesRequired:1];
[scrollView addGestureRecognizer:recognizer];
Run Code Online (Sandbox Code Playgroud)
我认为你必须将UIScrollView子类化才能做到这一点.
touchesBegan:withEvent:仅发送到UIView的子类.您可以在控制器中实现touchesBegan:withEvent:对吧?如果是这样,它将无法在那里工作......
或者,如果您在UIScrollView中放置了UIView的子类(您编写的),您也可以从那里捕获touchesBegan事件(但仅当用户触摸该特定子视图时).默认情况下,UIScrollView会将触摸传递给其子视图(请参阅touchesShouldBegin:withEvent:inContentView:在UIScrollView中).
小智 5
您还可以在控制器中响应这些事件.为此,您必须定义此功能(在您的控制器中):
- (BOOL)canBecomeFirstResponder {
return YES;
}
Run Code Online (Sandbox Code Playgroud)
然后,在'viewDidAppear'中,您需要调用'becomeFirstResponder':
- (void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
[self becomeFirstResponder];
Run Code Online (Sandbox Code Playgroud)