我很难找到UITapGestureRecognizer
来检测正在发生的每个点按。对于上下文,我正在制作鼓点应用程序。我已经让水龙头手势识别器正常工作,但是用户应该能够非常快速地敲击鼓,并且识别器只是在我们经常使用水龙头(如果你试图点击为尽你所能。)
我猜这与iOS分类连续非常快速的分类作为一个手势有关,但有没有办法让每次手指作为点击事件下降?
我尝试过使用UILongPressGestureRecognizer
的时间很短。
我尝试将requiredNumberofTouches
和requiredNumberofTaps
设置为1。
为了回答问题,似乎没有必要发布代码,但如果您提出要求,我会发布。
非常感谢任何帮助!
编辑:我正在添加我的代码,因为它可能会有所帮助:
-(void)tap:(UITapGestureRecognizer *)tapGestureRecognizer {
CGPoint location = [tapGestureRecognizer locationInView:[self view]];
switch ([self validateTouchLocation:location]) {
case 0:
return;
case 1:
[[ASSoundManager sharedManager] playSoundNamed:@"SD0025" ofType:@"mp3"];
break;
case 2:
default:
[[ASSoundManager sharedManager] playSoundNamed:@"SD0010" ofType:@"mp3"];
break;
}
float tapWidth = 30;
ASDrumTapView *drumTapView = [[ASDrumTapView alloc] initWithFrame:CGRectMake(location.x - (tapWidth / 2), location.y - (tapWidth / 2), tapWidth, tapWidth)];
[drumTapView setBackgroundColor:[UIColor clearColor]];
[drumTapView setNeedsDisplay];
[[self view] addSubview:drumTapView];
float animDuration = 0.75;
CGRect frame = [drumTapView frame];
[UIView animateKeyframesWithDuration:animDuration
delay:0.0
options:0
animations:^{
[UIView addKeyframeWithRelativeStartTime:0
relativeDuration:animDuration
animations:^{
[drumTapView setFrame:CGRectInset(frame, -frame.size.width, -frame.size.height)];
}];
[UIView addKeyframeWithRelativeStartTime:0
relativeDuration:3*animDuration/5
animations:^{
[[drumTapView layer] setOpacity:0.0];
}];
}
completion:^(BOOL finished) {
[drumTapView removeFromSuperview];
}];
}
答案 0 :(得分:2)
可能有很多原因:
multipleTouchEnabled
UIView
媒体资源
UIScrollView
或任何派生类中,请检查delaysContentTouches
属性答案 1 :(得分:1)
虽然我很感激所有人的意见,但我自己也明白了。
在我的代码中,我正在运行一个关键帧动画,其选项设置为0
。这意味着在动画期间,用户与视图的交互未启用。
通过将options
设置为UIKeyframeAnimationOptionAllowUserInteraction
,即使其中一个子视图仍处于动画状态,我也可以轻拍。
希望这有助于其他人!