需要帮助独立调用方法: - (void)orientationChanged :( NSNotification *)注释在iOS中

时间:2013-01-05 05:13:14

标签: ios uideviceorientation

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

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

反过来调用以下方法:

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

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

3 个答案:

答案 0 :(得分: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]];

答案 1 :(得分:0)

如果您需要设备的方向而无需等待通知,您可以这样做:

UIDeviceOrientation orientation = [UIDevice currentDevice].orientation;

答案 2 :(得分:0)

您可以通过传递nil参数或任何您希望传递的NSNotification类型的对象来调用它,如

在相同类的.m中调用它 -

[self orientationChanged:nil];

从另一个班级打来 -

[controller orientationChanged:nil]; //Declare method in .h first