2011-03-08 4 views
2

저는 iPhone 프로그래밍에 익숙하지 않습니다. 두 개의 소리를 내고있는 고양이와 함께 간단한 창문을 만들려고합니다. 고양이 아이콘을 클릭하면 "miaau"가 실행되고 창 (획) 위로 끌면 "mrrrr"이 만들어집니다. 그것은 작동하지만 항상 고양이 mrrrrr 기능을 시도 할 때 TouchesBegan 화재와 고양이는 "miaaau"를 수행합니다.건 드리면 touchesmoved 사용할 때 Touchesbegan은 항상 발사됩니까?

인터페이스를 인식하도록하려면 어떻게해야할까요? 첫 번째 옵션 인 "miaau"를 건드리지 않고 스트로크 고양이 만 원하십니까?

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 
} 

또는 :

답변

7

도움이 될 수 있습니다 UIGestureRecognizers에 대한 옵션 검사 문서

+0

확인

AVAudioPlayer *avPlayer1; AVAudioPlayer *avPlayer2; 

하는 .m 파일, 나는 BOOL의에 시도하고 당신은 나를 위해 작동 알려 주시기 바랍니다. 많은 감사. – Rafal

+0

+1 확실히 작동합니다. – Ishu

+0

타이머에 대해 걱정할 필요가 없다면 [self performSelector : @selector (checkTap) withObject : nil afterDelay : 0.1]을 수행 할 수도 있습니다. – bornbnid

0

Max' solution이 정확합니다. 확실히 작동 할 것입니다. 나는 대안을 가지고있다.이 접근법을 보라.

플레이어를 .h 파일로 개체화 한 다음 viewDidLoad에 할당하고 dealloc에서 해제하십시오.

-(void) touchesBegan:... { 

    //Play the miauu sound. 
} 

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

    //Play mrrrr. 
} 

편집

.H 파일,

-(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

최대 솔루션이 작동합니다. 고양이 miauu을 할 때 버튼을 클릭하고 mrrrr 때 스트로크하지만 가진 문제를 가지고 - (무효) checkKlik (NSTimer *) t { \t 경우 (KLIK) { \t \t 경우 ([터치보기] == KOT) { \t \t \t NSString * path = [[NSBundle mainBundle] pathForResource : @ "cat"ofType : @ "wav"]; \t \t \t AVAudioPlayer * theAudio = [[AVAudioPlayer alloc] initWithContentsOfURL : [NSURL fileURLWithPath : path] 오류 : NULL]; \t \t \t [theAudio play]; \t \t} \t \t klik = NO; \t} } 나는 터치가 선언되지 않은 것을 보여줍니다. "KOT"보기 만 클릭하기 때문에 터치 뷰 kot로 IF를 작성해야합니다. – Rafal

+0

당신이 당신의 기능을 만들고 터치가 터치의 일부이기 때문에 .Began and touchesMoved method.ok 내 대답을 시도해 보면 도움이 될 것입니다. – Ishu

+0

이수 (Ishu), 미아유 고양이가 놀고 멈추었을 때 touchesMoved에서 보여줄 방법을 알려줄 때? – Rafal