我是iPhone编程的新手。 我正试图做一个简单的窗口,一只猫做两声。当你点击猫图标时它应该做“miaau”,当你拖过窗口(笔划)时它应该是“mrrrr”。 它有效,但总是当我尝试制作猫mrrrrr功能时,TouchesBegan会发生火灾,而猫也会做“miaaau”。
如何让界面识别我只想要中风猫,而不是触摸它做第一个选项,“miaau”?
答案 0 :(得分:7)
我建议将NSTimer添加到touchesBegan方法,时间间隔较短(比如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的文档
答案 1 :(得分:1)
答案 2 :(得分:0)
Max' solution是正确的。它肯定会奏效。我有另一种选择,请看这种方法。
将播放器对象放在.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];
}