【问题标题】:How can I prepare a UISplitViewController secondary VC for a change to displayMode?如何准备 UISplitViewController 辅助 VC 以更改 displayMode?
【发布时间】:2014-09-06 02:39:59
【问题描述】:

在 iOS8 中,UISplitViewController 发生了变化,现在通过 splitViewController:willChangeToDisplayMode: 通知它的代理有一个挂起的 displayMode 变化。我需要更新辅助视图控制器的某些方面以响应此更改。

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

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

【问题讨论】:

    标签: ios objective-c uiviewcontroller uisplitviewcontroller displaymode


    【解决方案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 更频繁地触发。

    【讨论】:

      猜你喜欢
      • 2020-10-25
      • 2016-03-11
      • 2013-02-25
      • 2016-12-10
      • 1970-01-01
      • 2018-01-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多