2017-04-23 4 views
1

iOS 9.3 이상을 지원하는 새로운 앱에 처음으로 앱 상태 복원 API를 추가 한 상황이 발생했습니다. 상태 복원은 기능면에서 정상적으로 작동하지만 상태 복원 중 지연으로 인해 LaunchScreen.xib 내용 대신 화면 스냅 샷을 표시하는 것으로 나타났습니다. 스냅 샷을 통해 iOS가 앱 UI를 차지하는 자동 캡쳐 샷을 배경으로 간주합니다. 케이스는 인이 앱에상태 복원 중 launchScreen 대신 앱 화면 스냅 샷이 표시됨

Apple Documentation on App State Saving & Restoring

화면 스냅 샷 표시 : 당신이 응용 프로그램 상태 복원이 무엇인지 모르는 경우

, 그것은 아이폰 OS 6 나왔다, 여기에 애플에서 링크입니다 이 특정 앱으로 중요한 문제는 앱 상태 복원 중에 iOS 9.3.5를 실행하는 iPhone 4s에서 약 4 초 지연됩니다. 사용자는이 시간 동안 시작/시작 화면이 표시되지 않아 앱이 멈춘 것으로 인식합니다. 이 상황은 시뮬레이터와 장치 모두에서 현재 사용 가능한 모든 iOS 버전에서 재생산됩니다.

스냅 샷이 표시되는 것을 방지하고 응용 프로그램 상태 저장/복원 기능의 이점을 유지하면서 LaunchScreen.xib을 항상 사용하도록하려면 어떻게해야합니까?

답변

1

이 문제를 연구 한 끝에 Apple은 오래 전에이 상황을 해결하기 위해 UIApplication의 방법을 제공 한 것으로 밝혀졌습니다. 그러나 그 사용법은 오늘날까지도 문서화가 잘되어 있지 않습니다.

해결책은 UIApplication의 ignoreSnapshotOnNextAppliationLaunch 메소드를 사용하는 것입니다.

Apple ignoreSnapshotOnNextApplicationLaunch method

내가 설명 할 것이다 여기에 애플에 의해 제안 당신은 UIApplication 싱글 톤 패턴을 통해 액세스해야합니다 :이가 사용하는 경우

Apple UIApplication sharedApplication method

무슨 일이되지 않는다 명확하게 문서화되어 있으며 여기에서 공유하고 있습니다. ignoreSnapshotOnNextApplicationLaunch 메소드는 iOS가 View Controller (들)에서 앱 상태를 저장할 때 특별히 호출되지 않으면 아무런 효과가 없습니다. 홈 버튼을 탭하여 앱을 배경으로 사용할 때와 같은 경우.

백그라운드/포 그라운드 전환을 처리하는 AppDelegate 메서드에서이 메서드를 직접 호출 할 수 없습니다. 이후의 복원을 위해 해당 상태를 저장하는 동안 뷰 컨트롤러에서 호출해야하므로 백그라운드/전경 전환을 처리해야합니다. 애플이

의 UIViewController

Apple encodeRestorableStateWithCoder method에서 encodeRestorableStateWithCoder 방법을 제공 그리고 우리가 변화를해야 할 곳은이 절약 작업

. 상태 복원을 수행하면 이미 가지고 있어야합니다. 이 메서드 호출을 스토리 보드에서 복원 ID를 설정 한 각보기 컨트롤러 클래스에 추가하거나 수동으로 상태를 저장하면 UIApplication 단독 개체에서 ignoreSnapshotOnNextApplicationLaunch를 포함하여 모든 스냅 샷이 사용되지 않도록 할 수 있습니다. 이것은 이 아니며은 iOS가 스냅 샷을 찍는 것을 방지합니다. 재시작시 앱 상태 복원 중에 표시하지 않습니다.

// save any app state information that is not already saved automatically 
- (void)encodeRestorableStateWithCoder:(NSCoder *)coder { 

    // prevent taking a screen shapshot and force launchScreen xib to be used always 
    [[UIApplication sharedApplication] ignoreSnapshotOnNextApplicationLaunch]; 

    [super encodeRestorableStateWithCoder:coder]; 

    return; 
} 

iOS에서 이전에 저장 한 스냅 샷 파일을 삭제하도록하려면 테스트 중에 추가 한 후에 앱을 다시 배경으로 설정하십시오.

관련 문제