0

我希望在设备方向发生变化时收到通知。我已经设置了一个假设接收通知的测试方法。我正在尝试几个不同的观察者来实现这一点,但他们都没有工作。为什么 testMethod 没有被解雇?

- (void)viewDidLoad
{
    [super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.

    [[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications];
    // register for orientation change notification

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

    [[NSNotificationCenter defaultCenter] addObserver: self
                                         selector: @selector(testMethod)
                                             name: UIApplicationWillChangeStatusBarOrientationNotification
                                           object: nil];
    [[NSNotificationCenter defaultCenter] addObserver: self
                                         selector: @selector(testMethod)
                                             name: UIApplicationDidChangeStatusBarOrientationNotification
                                           object: nil];
}

- (void)testMethod
{
    NSLog(@"phone was rotated");
}
4

4 回答 4

1

我不小心在手机上启用了旋转锁。始终在不止一部手机上进行测试!

于 2012-08-09T21:23:16.353 回答
0

您需要使用方向通知,即 UIDeviceOrientationDidChangeNotification。不要将它放在@"UIDeviceOrientationDidChangeNotification" 中,因为您不知道常量的实际内容,即 UIDeviceOrientationDidChangeNotification。看来您正在使用视图控制器。你应该使用 willRotateToInterfaceOrientation:duration: 和 didRotateFromInterfaceOrientation:

于 2012-08-09T18:03:51.683 回答
0

bool 类型的结尾 设置方向 .write 在视图的所有结束中返回 yes ..在 potrait 和横向模式下的方向发生

于 2012-08-09T18:12:04.800 回答
0

如果您需要的只是方向更改通知,则无需根本不需要使用BegingEnerationDeviceOlientation。你只需要使用didRotateFromInterfaceOrientation:方法。

如果它没有被触发,则意味着您不在正确的视图控制器中。此方法在顶部视图控制器(即窗口的根视图控制器)中调用,尽管我认为 UINavigationControllers 会很好并将其交给他们的视图控制器。

换句话说,听起来您正试图在错误的视图控制器中捕捉到这一点。

于 2012-08-09T19:51:33.183 回答