2 Stimmen

Berührt Began wird immer ausgelöst, wenn Touchesmoved verwendet wird?

Ich bin neu in der iPhone-Programmierung. Ich versuche, ein einfaches Fenster mit einer Katze zu machen, die zwei Geräusche macht. Wenn Sie auf das Katzensymbol klicken, sollte es "miaau" machen und wenn Sie über das Fenster streichen, sollte es "mrrrr" machen. Es funktioniert, aber immer wenn ich versuche, die Katzen-Mrrrrr-Funktion auszuführen, wird TouchesBegan ausgelöst und die Katze macht auch "miaaau".

Was kann ich tun, damit die Benutzeroberfläche erkennt, dass ich die Katze nur streichen möchte und nicht berühren, um die erste Option "miaau" auszuführen?

7voto

Max Punkte 16646

Ich schlage vor, dem touchesBegan-Methoden einen NSTimer mit kleinem Zeitintervall (z. B. 0,1 Sekunden) hinzuzufügen:

BOOL tap_event = NO; // als Instanzvariable im Header deklariert

-(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 hier
     tap_event = NO;
}

-(void) touchesMoved:... {
    tap_event = NO;
     //mrrrr hier
}

Oder als Option die Dokumentation für UIGestureRecognizers überprüfen

1voto

visakh7 Punkte 26330

0voto

Ishu Punkte 12816

Max' Lösung ist korrekt. Es wird definitiv funktionieren. Ich habe eine Alternative, sieh diesen Ansatz.

Machen Sie Ihr Spielerobjekt in einer .h-Datei, dann zuweisen Sie es in viewDidLoad und geben Sie es in dealloc frei.

-(void) touchesBegan:... {

    //Spielen Sie den Miauu-Sound ab.
}

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

    //Spielen Sie Mrrrr ab.
}

Bearbeiten

.h-Datei,

AVAudioPlayer *avPlayer1;
AVAudioPlayer *avPlayer2;

.m-Datei

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

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X