每次设备旋转时,如何在UIView子类中调用方法?

时间:2013-08-09 14:59:03

标签: ios

我希望在设备旋转时调用添加到主窗口的项目的UIView子类中的函数。

我有很多项目,所以我不想逐个调用这样的方法,但是我想要为这个项目和所有子视图自动调用它。

谢谢

1 个答案:

答案 0 :(得分:1)

要获取自动子视图行为,请声明UIView类别,添加您希望调用的方法。然后让您的视图订阅设备轮换通知,并且作为其处理通知的一部分,在其所有子视图上调用相同的方法。像这样的东西(键入没有自动更正或编译的好处,所以请作为插图,而不是一个完整的示例程序):

@interface UIView (MyAppAdditions)

- (void)rotationDetected;

@end

@implementation UIView (MyAppAdditions)

- (void)rotationDetected
{

}

@end


@implementation MyView

- (id)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self) {
        [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(didRotate:) name:UIDeviceOrientationDidChangeNotification object:nil];
    }

    return self;
}

- (void)didRotate:(NSNotification *)notification
{
    [self rotationDetected];
    [self.subviews makeObjectsPerformSelector:@selector(rotationDetected)];
}

@end

更灵活的实施也会覆盖initWithCoder:awakeFromNib以订阅轮换通知。