motionEnded не вызывается (нет контроллера представления) - PullRequest
3 голосов
/ 21 августа 2010

Я думаю, что сделал все, что мог, чтобы обнаружить сотрясение, но motionEnded:withEvent: никогда не вызывали. (Один недостаток в том, что у меня нет UIViewController - мое приложение основано на шаблоне «OpenGL ES App».)

Я добавил application.applicationSupportsShakeToEdit = YES; к моим application:didFinishLaunchingWithOptions: и

- (BOOL)canBecomeFirstResponder { return YES; }

до EAGLView.m (который вызывается) и [self becomeFirstResponder]; до initWithCoder: (и пробовал и в других местах).

Но отладчик никогда не нажимает

- (void)motionEnded:(UIEventSubtype)motion withEvent:(UIEvent *)event 

Я что-то пропустил? Нужно ли иметь контроллер?

(я использую iOS 3.2 в симуляторе iPad.)

Ответы [ 4 ]

3 голосов
/ 20 сентября 2013

Вы должны добавить это в свой контроллер:

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

-(BOOL)becomeFirstResponder
{
    return YES;
}
2 голосов
/ 04 апреля 2011

Способ работы цепочки UIResponder с уведомлением о встряхивании является неприятным. Похоже, что UIWindow всегда получает уведомление, а затем подответчики могут или не могут в зависимости от того, что над ними в цепочке. Я создал UIWindow подкласс и определил его как мой класс окна со следующим:

- (void)motionEnded:(UIEventSubtype)motion withEvent:(UIEvent *)event 
{
    if (event.type == UIEventSubtypeMotionShake) 
        [[NSNotificationCenter defaultCenter] postNotificationName:@"UIEventSubtypeMotionShakeEnded" object:nil];
}

Затем, для любых видов, которым нужны уведомления о встряхивании, я просто попросил их добавить себя в качестве наблюдателя на событие UIEventSubtypeMotionShakeEnded, и они получали его каждый раз.

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(shakeNotification:)
                                             name:@"UIEventSubtypeMotionShakeEnded" object:nil];
0 голосов
/ 25 августа 2010

Обновление до последней версии SDK волшебным образом решило проблему.[Shrug]

0 голосов
/ 21 августа 2010

Вы не можете стать первым респондентом, пока ваше представление не окажется в иерархии представлений.

...