2010-02-12 3 views
0

после прочтения некоторых сообщений об осуществлении встряхивания на 3.0, я думаю, что я получаю эту идею, но я не получаю никакого вызова к:встряхивание на 3,0 в UITableViewController

motionBegan motionEnded motionCancelled

это является примером того, что я прочитал: how to detect and program around shakes for the iphone

Я уверен, что я добавил

[self becomeFirstResponder]; 

и

-(BOOL)canBecomeFirstResponder { 
NSLog(@"First responder"); 
return YES; 
} 

Должен ли я включить специальный делегат для этих событий?

Я понимаю, что эти события контролируются системой, и они передаются первым респондентом, и идти дальше ...

любая идея?

спасибо,

r.

ответ

1

У меня было много проблем, чтобы заставить это работать, и я, наконец, сдался и последовал совету Йандреа. Он предложил подклассифицировать UIWindow и реализовать движение, указанное там. Это цитата из его сообщения here, ищите его довольно далеко.

Во-первых, я подклассифицировал UIWindow. Это легкий peasy. Создайте новый файл класса с интерфейсом, таким как MotionWindow : UIWindow (не стесняйтесь выбирать свой собственный, natch). Добавьте метод следующим образом:

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

Изменение @ "DeviceShaken" на имя уведомления по вашему выбору. Сохраните файл .

Теперь, если вы используете MainWindow.xib (запас Xcode шаблон материал), заходим в там и изменить класс вашего объекта Window из UIWindow в MotionWindow или все, что вы назвали его. Сохраните xib. Если вы программным образом настроили UIWindow, используйте вместо этого свой класс Window .

Теперь ваше приложение использует специализированный класс UIWindow . Где бы вы ни пожелали , расскажите о встряхивании, зарегистрируйтесь для их уведомлений!Как это:

[[NSNotificationCenter defaultCenter] addObserver:self 
selector:@selector(deviceShaken) name:@"DeviceShaken" object:nil]; 

Чтобы удалить себя в качестве наблюдателя:

[[NSNotificationCenter defaultCenter] removeObserver:self]; 
+0

Этот подход звучит великолепно, и это хорошо и очень легко реализовать. Я попробую! спасибо, r. – mongeta

+0

Я получаю ДВОЙНЫЕ звонки из Центра уведомлений, когда я встряхиваю его на Симуляторе, но только ОДНИМ на устройстве (iPhone) :-) спасибо! – mongeta

+0

no problem mate :) – willcodejavaforfood

0

Где вы звоните: becomeFirstResponder? Вы должны сделать это в viewDidAppear. Увольняется ли это?

+0

Да, я вызываю в viewDidAppear, и да, это уволили. спасибо – mongeta

Смежные вопросы