Не могу получить события встряски на iPhone - PullRequest
0 голосов
/ 04 апреля 2011

Я не могу получать события встряски на iPhone.

Я следил за другими вопросами здесь безрезультатно.Я также попытался следовать примеру GLPaint от Apple, но он выглядит точно так же, как мой исходный код, с небольшим отличием.Исходный код GLPaint / works /, mine / does not/.

Итак, вот что у меня есть:

Controller.m

- (void)awakeFromNib {
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(shakeEnded) name:@"shake" object:nil];
}

ShakingEnabledWindow.m

- (void)shakeEnded {
    NSLog(@"Shaking ended.");
}

- (void)motionBegan:(UIEventSubtype)motion withEvent:(UIEvent *)event {
}

- (void)motionEnded:(UIEventSubtype)motion withEvent:(UIEvent *)event {
    if (motion == UIEventSubtypeMotionShake ) {
        // User was shaking the device. Post a notification named "shake".
        [[NSNotificationCenter defaultCenter] postNotificationName:@"shake" object:self];
        NSLog(@"Shaken!");
    }
}

- (void)motionCancelled:(UIEventSubtype)motion withEvent:(UIEvent *)event { 
}

В моем XIB есть окно, которое представляет собой ShakingEnabledWindow и объект, мой контроллер.

У меня заканчиваются идеи, надеюсь, кто-нибудь может мне помочь.:)

Ответы [ 3 ]

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

Документация NSNotificationCenter гласит:

addObserver: селектор: имя: объект: messagesSelector Селектор, который указывает сообщение, которое получатель отправляет NotificationObserver, чтобы уведомить егопубликации уведомлений.У метода, указанного параметром messagesSelector , должен быть один и только один аргумент (экземпляр NSNotification).

Таким образом, ваш метод shakeEnded является неправильным, поскольку он не принимает параметров.Это должно выглядеть:

- (void)shakeEnded:(NSNotification*)notiication {
    NSLog(@"Shaking ended.");
}

- (void)awakeFromNib {
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(shakeEnded:) name:@"shake" object:nil];
}
1 голос
/ 04 апреля 2011

В viewDidAppear станьте первым респондентом:

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

И убедитесь, что вы можете быть первым респондентом:

- (BOOL)canBecomeFirstResponder {
    return YES;
}

Затем вы можете реализовать обнаружение движения.*

- (void)motionEnded:(UIEventSubtype)motion withEvent:(UIEvent *)event
{
    if (event.subtype == UIEventTypeMotion){
        //there was motion
    }
}
0 голосов
/ 04 апреля 2011

Я думаю, что вы неправильно проверяете тип движения.Вам нужно проверить против event.subtype вместо motion:

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