0

我正在编写一个检查设备方向的应用程序,因此,我有以下代码块:

[[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications];
    [[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(orientationChanged:)
                                                 name:UIDeviceOrientationDidChangeNotification
                                               object:[UIDevice currentDevice]];

依次调用以下方法:

- (void) orientationChanged:(NSNotification *)note {
    ...
}

我想做的是将上述方法与我完全从单独部分发布的初始代码块分开调用。这可能吗?如果可以,怎么做?

4

3 回答 3

2

我通常在这种情况下做的就是nil作为参数传递:

[self orientationChanged:nil];

这取决于通知本身对方法实现的重要性。您可能必须构建一个包含适当信息的通知:

NSNotification *n = [NSNotification notificationWithName:@"someName" object:someObject];
[self orientationChanged:n];

但是,我开始将这种类型的需求视为代码异味,我尝试做的是将通知处理程序执行的工作提取到一个单独的方法中并直接调用该方法,例如:

- (void)handleOrientationChangeForDevice:(UIDevice *)d {
    // do something here
}

- (void)orientationChanged:(NSNotification *)n {
    [self handleOrientationChangeForDevice:n.object];
}

然后,在调用代码中,您可以执行以下操作:

[self handleOrientationChangeForDevice:[UIDevice currentDevice]];
于 2013-01-05T05:33:49.700 回答
0

您可以通过传递 nil 参数或任何您想要传递的 NSNotification 类型的对象来调用它

以同级的 .m 调用它-

[self orientationChanged:nil];

从另一个班级打电话-

[controller orientationChanged:nil]; //Declare method in .h first
于 2013-01-05T05:33:26.617 回答
0

如果您需要设备的方向而不等待通知,您可以通过以下方式获取:

UIDeviceOrientation orientation = [UIDevice currentDevice].orientation;
于 2013-01-05T05:17:31.953 回答