5

我想在整个应用程序中集成抖动功能。所以我在 appDelegate 中做所有事情。我需要推送一个viewController,我可以推送motionBegan,但我想做motionEnded。是的,运动结束确实在视图控制器中工作,但在应用程序委托中它没有被调用。作为

- (void)applicationDidBecomeActive:(UIApplication *)application {
     [self becomeFirstResponder];
}
- (BOOL)canBecomeFirstResponder{
    return YES;
}

未调用motionEnded

-(void) motionEnded:(UIEventSubtype)motion withEvent:(UIEvent *)event {
    if(event.subtype==UIEventSubtypeMotionShake){
        NSLog(@"motionEnded called");
    }
}

运动开始调用

-(void) motionBegan:(UIEventSubtype)motion withEvent:(UIEvent *)event {
    if(event.subtype==UIEventSubtypeMotionShake){
        NSLog(@"motionBegan called");
    }
}
4

1 回答 1

1

你基本上可以根据你的需要注册你viewController的或任何applicationDidBecomeActiveNotification

例如,在您viewControllerviewDidLoad方法中,您可以将其注册为通知

[[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(myMethod)
                                                 name:UIApplicationDidBecomeActiveNotification object:nil];

并在你的类中实现这个方法,myMethod每次你的应用程序激活时你都会调用

-(void) myMethod(){
 // do your stuff
}

最后从 dealloc 方法中的通知中取消注册 viewController

-(void)dealloc{
[[NSNotificationCenter defaultCenter] removeObserver:self];
}
于 2013-03-05T12:20:36.140 回答