이 기능을 구현하기 위해 인터넷에서 여러 기사를 읽어보니 기본적으로는 같다.
첫 번째 단계는 Appdelegate에서 다음 작업을 수행하는 것입니다.
-(UIInterfaceOrientationMask)응용 프로그램:(UIApplication *)응용 프로그램 지원InterfaceOrientationsForWindow:(UIWindow *)window {
if ( self .allowRotation) {//allowRotation 속성이 설정되어 있으면 가로 화면 지원
UIInterfaceOrientationMaskLandscapeRight 반환 ;
}
return UIInterfaceOrientationMaskPortrait;//기본적으로 가로 화면은 전역적으로 지원되지 않습니다.
}
두 번째 단계는 다운로드한 코드를 가로 화면이 필요한 페이지에 작성하는 것입니다.
-( void )viewWillAppear:( BOOL )애니메이션{
[ super viewWillAppear:animated];
[ 자기 전체 화면 시작];
}
-( void )viewWillDisappear:( BOOL )애니메이션{
[ super viewWillDisappear:animated];
[ self endFullScreen];
}
//전체화면 진입
-( 무효 ) 전체 화면 시작
{
AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] 델리게이트];
appDelegate.allowRotation = 예 ;
}
// 전체 화면 종료
-( 무효 )endFullScreen
{
AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] 델리게이트];
appDelegate.allowRotation = 아니요 ;
// // 강제 수정:
if ([[UIDevice currentDevice] respondsToSelector: @selector (setOrientation:)]) {
SEL 선택기 = NSSelectorFromString(@"setOrientation:");
NSInvocation *invocation = [NSInvocation invocationWithMethodSignature:[UIDevice instanceMethodSignatureForSelector:selector]];
[호출 setSelector:선택기];
[호출 setTarget:[UIDevice 현재 장치]];
int val =UIInterfaceOrientationPortrait;
[호출 setArgument:&val atIndex:2];
[호출 호출];
}
}
이렇게 될줄 알았는데 실행중에 크래시가 날줄은 몰랐네요 크래시 정보는 다음과 같습니다.
'UIApplicationInvalidInterfaceOrientation', 이유: '지원되는 방향에는 응용 프로그램과 공통된 방향이 없으며 [ZDFullScreenController shouldAutorotate]가 YES를 반환합니다.'
마지막으로, 이 충돌의 원인은 - ( BOOL )shouldAutorotate였습니다. 이 방법 시스템의 기본값은 YES입니다. NO로 변경하면 됩니다.