2014-11-10 2 views
9

에 호출되지 willRotateToInterfaceOrientation : 나는 iOS7에에서 실행하는 경우은 내가 따라서를 제시 내 응용 프로그램에서 <a href="https://github.com/vfr/Reader">VFR PDF viewer library</a>를 사용하고 iOS8의

ReaderDocument *document = [ReaderDocument withDocumentFilePath:pdfFile password:nil]; 
ReaderViewController *vc = [[ReaderViewController alloc] initWithReaderDocument:document]; 
[self.navigationController pushViewController:vc animated:YES]; 

은 모든 것이 잘 작동합니다.

iOS8에서 내 앱을 실행하면 ReaderViewController의 willRotateToInterfaceOrientation 메서드가 호출되지 않으므로 장치를 회전 할 때 문서가 올바르게 다시 포맷되지 않습니다.

그러나 iOS8의 라이브러리와 함께 제공되는 데모 응용 프로그램을 실행하면 ReaderViewController의 willRotateToInterfaceOrientation이 호출되어 라이브러리가 정상적으로 작동한다고 생각하게되고 잘못된 작업을 수행하고 있습니다. 뭔가) 내 애플 리케이션.

저는이 동작에 다소 의문이 있습니다. willRotateToInterfaceOrientation이 iOS8에서 내 앱에서 호출되지 않는 이유는 무엇입니까?하지만 다른 유사 콘텐츠에서는 발생합니까? 어떻게 추적 할 수 있습니까?

답변

12

마침내 문제를 해결할 수있었습니다. 다른 사람이 같은 문제를 안고있는 경우 문제가 무엇인지 여기에 있습니다.

viewWillTransitionToSize:withTransitionCoordinator:을 구현 한 클래스에서 내 ReaderViewController이 제시되었으므로 자식보기 컨트롤러에서 사용되지 않는 메서드가 호출되지 않았습니다.

또한 그 구현이

[super viewWillTransitionToSize:size withTransitionCoordinator:coordinator] 

등 모든 아이 뷰 컨트롤러의 viewWillTransitionToSize:withTransitionCoordinator: 방법 중 하나를 호출되는되지 않은

를 호출되지 않았습니다.

수정

ReaderViewController에서 해당 메소드를 호출 내 서브 클래스에 viewWillTransitionToSize:withTransitionCoordinator:를 추가, 상위 VC의 viewWillTransitionToSize:withTransitionCoordinator: 방법, 서브 클래스 ReaderViewController

[super viewWillTransitionToSize:size withTransitionCoordinator:coordinator] 

에 호출을 추가하는 것이 었습니다.

+0

문제를 해결할 때 자신의 대답을 승인 된 답변으로 확인하여 다른 사람들이 해결할 수 있음을 알 수 있습니다. – HpTerm

3

단순히 iOS8에서 willRotateToInterfaceOrientation이 더 이상 호출되지 않으므로 더 이상 사용되지 않습니다. 새로운 회전 방법이 구현되지 않으며, 프로젝트가 아이폰 OS 8 SDK로 컴파일 경우

, 뷰 컨트롤러는 사용되지 않는 회전 방법에 calls-을받지 줄래. 회전 방법은 아이폰 OS 8 SDK에서 사용되지 않습니다

:

당신과 비슷한 질문은 @mluisbrown의 here

표창을 찾을 수 있습니다. iOS 7 SDK로 제작 된 앱에는 이 적용되지 않으며 iOS 버전 8 및 향후 출시 될 iOS 버전에서도 실행됩니다.

나는 너와 비슷한 문제를 조금 겪었습니다. 나는 애플의 권고에 따라 viewWillTransitionToSize을 사용하려고 시도했는데, 내 경우에는 문제가 해결되지 않았는데, 이는 회전과는 달리 소형에서 일반으로 변경 될 때만 발생하기 때문입니다.

viewWillTransitionToSize : withTransitionCoordinator : 인터페이스 기반 조정.

apple documentation에 자세히 설명되어

또한 WWDC 2014의 영상이 설명하지만 난 그것이 어떤 비디오 기억할 수 없다. 아마도 What's new in Cocoa touch에있는 것이거나 View Controller Advancements in iOS 8에있는 것일 수 있습니다. 설명 된 바와 같이 나는 일반에서 변경되지 않았기 때문에 내 경우 viewWillTransitionToSize에, 압축하기 위해 호출되지 않았 음을

편집

참고 너무 엄격 애플 말해서, 어떤 크기의 변화가 없었다.

유일한 해결책은 해당보기 컨트롤러의 viewDidLayoutSubviews에서 수동으로 처리하는 것이 었습니다.

필자의 경우 필자는 autolayout을 사용하여 테이블 뷰에 표시된 최상위 셀을 추적하고 싶었습니다. 시스템에 의해 자동으로 추적되지 않았으므로 수동으로 확인하고 회전시 적절한 셀로 수동으로 스크롤해야했습니다. 그래서 내가 그렇게 했어. 그것은 상당히 무거웠지만 제 경우에는 효과가 있습니다.

누구나 쉽게 해결할 수 있다면 나도 흥미가있을 것입니다.

+0

viewWillTransitionToSize : withTransitionCoordinator : 메서드를 ReaderViewController 클래스에 추가했으며 장치 회전시이를 호출하지 않습니다. 나는 그 방법을 추가하는 것 이외에 무엇인가해야합니까? –

+0

회전이 정확히 크기 전이가 아닙니다. Apple은 소형 또는 일반 크기에서 가로 또는 세로로 이동하는 경우를 대비하여 하나라고 가정합니다. 내 경우에는 회전을 감지하기 위해 지정된 컨트롤러의 viewDidAppear에서 수동으로 비헤이비어를 처리해야했습니다. 불행히도 나는 그것을 쉽게 할 수있는 다른 쉬운 것을 찾지 못했습니다. – HpTerm

+1

이제 더 혼란스러워집니다! viewDidAppear은 장치가 회전 할 때가 아니라 뷰가 표시 될 때만 호출되기 때문에이 비헤이비어를 어떻게 처리하는지 이해할 수 없습니다. –

관련 문제