2

在 iOS8 中,UISplitViewController 发生了变化,现在通过splitViewController:willChangeToDisplayMode:. 我需要更新辅助视图控制器的某些方面以响应此更改。

在这个委托方法期间调用辅助 VC 上的方法很简单,但是 VC 还不知道它的新边界是什么。

除了辅助 VC 边界上的 KVO 之外,是否有合理的方式来通知 VC 的边界将发生变化?理想情况下,VC 会viewWillTransitionToSize:withTransitionCoordinator:要求更改 displayMode,因为这提供了与过渡一起制作动画的能力。

4

1 回答 1

1

所以,现在我只使用KVO。我遵循了这里的一些建议。

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 更频繁地触发。

于 2014-09-06T06:20:03.180 回答