如何准备UISplitViewController辅助VC以更改displayMode?

时间:2014-09-06 02:39:59

标签: ios objective-c uiviewcontroller uisplitviewcontroller displaymode

在iOS8中,UISplitViewController已更改,现在通过splitViewController:willChangeToDisplayMode:通知其委托者挂起的displayMode更改。我需要更新辅助视图控制器的某些方面以响应此更改。

在此委托方法中调用辅助VC上的方法非常简单,但VC还不知道它的新界限是什么。

除了KVO在二级VC的界限之外,是否有合理的方式通知VC的界限会发生变化?理想情况下,VC会viewWillTransitionToSize:withTransitionCoordinator:调用displayMode更改,因为这样可以在转换过程中设置动画。

1 个答案:

答案 0 :(得分:1)

所以,现在我只是使用KVO。我遵循了一些建议here

viewDidLoad

[self.view addObserver:self
            forKeyPath:NSStringFromSelector(@selector(frame))
               options:(NSKeyValueObservingOptionOld|NSKeyValueObservingOptionNew)
               context:nil];

然后:

- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
{
    if ([object isKindOfClass:[UIScrollView class]] && [keyPath isEqualToString:NSStringFromSelector(@selector(frame))]) {
        CGRect newFrame = [change[@"new"] CGRectValue];
        CGRect oldFrame = [change[@"old"] CGRectValue];

        if ((newFrame.size.width == oldFrame.size.width) || (newFrame.size.height == oldFrame.size.height)) {
            // If one dimension remained constant, we assume this is a displayMode change instead of a rotation

            // Make whatever changes are required here, with access to new and old frame sizes.
        }
    }
}

我在视图的边界上尝试了这个,但是它比框架上的KVO更频繁地发射。