我是 iPhone 编程的新手。我正在尝试用一只猫做两个声音做一个简单的窗口。当您单击猫图标时,它应该执行“miaau”,而当您拖动窗口(笔划)时,它应该执行“mrrrr”。它有效,但总是当我尝试让 cat mrrrrr 函数 TouchesBegan 触发并且 cat 也执行“miaaau”时。
怎么做才能让界面识别我只想要抚摸猫,而不是触摸它来执行第一个选项“miaau”?
我是 iPhone 编程的新手。我正在尝试用一只猫做两个声音做一个简单的窗口。当您单击猫图标时,它应该执行“miaau”,而当您拖动窗口(笔划)时,它应该执行“mrrrr”。它有效,但总是当我尝试让 cat mrrrrr 函数 TouchesBegan 触发并且 cat 也执行“miaaau”时。
怎么做才能让界面识别我只想要抚摸猫,而不是触摸它来执行第一个选项“miaau”?
我建议在 touchesBegan 方法中添加一个 NSTimer,时间间隔很小(比如 0.1 秒):
BOOL tap_event = NO; //ivar declared in header
-(void) touchesBegan:... {
tap_event = YES;
[NSTimer scheduledTimerWithTimeInterval: 0.1 target: self selector: @selector(checkTap:) userInfo: nil repeats: NO];
}
-(void) checkTap:(NSTimer*) t {
if( tap_event ) //miauu here
tap_event = NO;
}
-(void) touchesMoved:... {
tap_event = NO;
//mrrrr here
}
或者作为 UIGestureRecognizers 的选项检查文档
Max 的解决方案是正确的。它肯定会奏效。我有另一种选择,请参阅这种方法。
在 .h 文件中创建您的播放器对象,然后在 viewDidLoad 中分配它并在 dealloc 中释放。
-(void) touchesBegan:... {
//Play the miauu sound.
}
-(void) touchesMoved:... {
[self.yourPlayer stop];
//Play mrrrr.
}
编辑
.h 文件,
AVAudioPlayer *avPlayer1;
AVAudioPlayer *avPlayer2;
.m 文件
-(void) touchesBegan:... {
NSString *path = [[NSBundle mainBundle] pathForResource:@"cat" ofType:@"wav"];
avPlayer1 = [[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL fileURLWithPath:path] error:NULL];
[avPlayer1 play];
}
-(void) touchesMoved:... {
[avPlayer1 stop];
NSString *path = [[NSBundle mainBundle] pathForResource:@"cat" ofType:@"wav"];
avPlayer2 = [[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL fileURLWithPath:path] error:NULL];
[avPlayer2 play];
}
-(void)dealloc
{
[avPlayer1 release];
[avPlayer2 release];
[super dealloc];
}