开发者

Touchesbegan always fire when using touchesmoved?

I'm new to iPhone programing. I'm trying to do a simple window with a cat doing two sounds. When you click at the cat icon it should do "miaau", and when wou drag over window (stroke) it should make "mrrrr". It works, but always when I try to make cat mrrrrr function TouchesBegan f开发者_开发技巧ires and cat also do "miaaau".

What to do to make the interface recognize I want only stroke cat, not to touch it for doing the first option, "miaau"?


I suggest to add a NSTimer to touchesBegan method with small time interval (say 0.1 sec):

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
}

Or as an option check docs for UIGestureRecognizers


This may help you

When does a touchesBegan become a touchesMoved?

touchesBegin & touchesMove Xcode Obj C Question


Max' solution is correct. It will definitely work. I am having an alternative, see this approach.

Make your player object in an .h file then allocate it in viewDidLoad and release in dealloc.

-(void) touchesBegan:... {

    //Play the miauu sound.
}

-(void)  touchesMoved:... {
[self.yourPlayer stop];

    //Play mrrrr.
}

Edit

.h file,

AVAudioPlayer *avPlayer1;
AVAudioPlayer *avPlayer2;

.m file

 -(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];
}
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜