качая iphone в 4.0+ - PullRequest
       32

качая iphone в 4.0+

1 голос
/ 07 апреля 2011

Как использовать shake-события в iOS 4.0+?Я протестировал это решение, но не работает в 4.1.Возможно, что-то изменилось или я что-то делаю не так? motionBegan: не работает

1 Ответ

2 голосов
/ 07 апреля 2011

Из этого SO вопроса Как я могу определить, когда кто-то трясет iPhone? Основной трюк в том, что вам нужен UIView (не контроллер просмотра), который вы хотите использовать в качестве firstResponder для получения сообщений о событиях встряхивания.,Вот код, который вы можете использовать в любом UIView для получения событий встряски:

@implementation ShakingView

- (void)motionEnded:(UIEventSubtype)motion withEvent:(UIEvent *)event
{
    if ( event.subtype == UIEventSubtypeMotionShake )
    {
        // Put in code here to handle shake
    }

    if ( [super respondsToSelector:@selector(motionEnded:withEvent:)] )
        [super motionEnded:motion withEvent:event];
}

- (BOOL)canBecomeFirstResponder
{ return YES; }

@end

Вы можете легко преобразовать любой UIView (даже системные представления) в представление, которое может получить событие встряски, просто подклассировав представление столько эти методы (и затем выбор этого нового типа вместо базового типа в IB или использование его при выделении представления).

В контроллере представления вы хотите установить это представление, чтобы стать первым респондентом:

- (void) viewWillAppear:(BOOL)animated
{
    [shakeView becomeFirstResponder];
    [super viewWillAppear:animated];
}
- (void) viewWillDisappear:(BOOL)animated
{
    [shakeView resignFirstResponder];
    [super viewWillDisappear:animated];
}

Не забывайте, что если у вас есть другие представления, которые становятся первыми респондентами от действий пользователя (например, панель поиска или поле ввода текста), вам также необходимо восстановить статус первого респондента дрожащего представления, когдадругое представление уходит в отставку!

Этот метод работает, даже если для applicationSupportsShakeToEdit задано значение NO.

...