Цель C: встряхнуть проблемы - PullRequest
1 голос
/ 27 января 2011

Я обнаруживаю сотрясение, которое запускает анимацию, и когда она заканчивается, анимация прекращается. Иногда это работает, но иногда он не осознает, что встряхивание закончилось, поэтому он никогда не вызовет метод motionEnded. У кого-нибудь еще возникла такая проблема? Решения?

-(BOOL)canBecomeFirstResponder {
return YES;
}

-(void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:NO];
[self becomeFirstResponder];
}

-(void)viewWillDisappear:(BOOL)animated {
[super viewWillDisappear:NO];
}

-(void)viewDidDisappear:(BOOL)animated {
[self resignFirstResponder];
[super viewDidDisappear:NO];
}

-(void)motionBegan:(UIEventSubtype)motion withEvent:(UIEvent *)event
{
if (event.type == UIEventSubtypeMotionShake )
{
    NSLog(@"1");
    [img startAnimating];
}
}

-(void)motionEnded:(UIEventSubtype)motion withEvent:(UIEvent *)event
{
if (event.type == UIEventSubtypeMotionShake )
{
    NSLog(@"3");
    [img stopAnimating];
}
}

1 Ответ

0 голосов
/ 01 февраля 2011

Apple, похоже, обсуждает "несогласованность", с которой вы здесь сталкиваетесь: http://developer.apple.com/library/ios/#documentation/EventHandling/Conceptual/EventHandlingiPhoneOS/MotionEvents/MotionEvents.html

В листинге 4-2 говорится:

...одно важное различие между событиями касания и событиями встряхивания.Когда пользователь начинает встряхивать устройство, система отправляет событие движения первому респонденту в сообщении motionBegan: withEvent:;если первый респондент не обрабатывает событие, он перемещается вверх по цепочке респондента.Если встряхивание длится менее секунды или около того, система отправляет сообщение motionEnded: withEvent: первому респонденту. Но если встряхивание длится дольше или если система определяет, что движение не является встряхиванием, первый респондент получает сообщение motionCancelled: withEvent:: withEvent callback, чтобы увидеть, происходит ли это в тех случаях, когда вы не получаете вызов motionEnded.

...