Прикосновения всегда срабатывали при использовании прикосновения? - PullRequest
2 голосов
/ 08 марта 2011

Я новичок в программировании iPhone.Я пытаюсь сделать простое окно с котом, делающим два звука.Когда вы нажимаете на иконку кошки, она должна делать «miaau», а когда вы перетаскиваете окно (штрих), она должна делать «mrrrr».Это работает, но всегда, когда я пытаюсь настроить функцию cat mrrrrr, TouchesBegan запускает и cat также выполняет команду "miaaau".

Что нужно сделать, чтобы интерфейс распознал, что я хочу только штрих кота, а не трогать его для выполненияпервый вариант "мяу"?

Ответы [ 3 ]

7 голосов
/ 08 марта 2011

Я предлагаю добавить 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

0 голосов
/ 08 марта 2011

Максимальное решение правильно.Это определенно будет работать.У меня есть альтернатива, см. Этот подход.

Создайте объект проигрывателя в файле .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];
}
...