1

iOS8에서 UISplitViewController가 변경되었으며 이제 대리자에게 splitViewController:willChangeToDisplayMode:을 통해 보류중인 displayMode 변경 사항을 알립니다. 이 변경에 대한 응답으로 보조 뷰 컨트롤러의 일부 측면을 업데이트해야합니다.displayMode를 변경하기 위해 UISplitViewController 보조 VC를 준비하려면 어떻게합니까?

이 위임 메서드 중에 보조 VC의 메서드를 호출하기는 간단하지만 VC는 새로운 경계가 무엇인지 아직 알지 못합니다.

보조 VC의 경계에서 KVO를 제외하고 VC의 경계가 변경된다는 알림을받을 수있는 합리적인 방법이 있습니까? 이상적으로 VC는 viewWillTransitionToSize:withTransitionCoordinator:이 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보다 더 자주 많이 발사했다.