2014-07-08 5 views
8

시스템에서 다른 앱을 캡처 할 때 내 앱이 applicationWillResignActive을 차지하는 것으로 보입니다. 놀랍게도iOS 멀티 태스킹 스위처 시스템 이미지와 애플리케이션 이미지의 불일치 문제 해결 방법

시스템 촬영 화상 약 0.6 초 사이의 지연이 (b) 게임 (d)에 의해 촬영 화상. 시스템이 applicationWillResignActive 이전의 화면 캡처를 취해야하는 경우에는 약간의 차이가 있지만, 빠르게 움직이는 물체가있는 게임의 경우 플레이어가 쉽게 알아 차릴 수 있습니다.

어떻게 해결할 수 있습니까?

다음 플레이어가 만드는 단계이며,이 같은 차이가 발생하는 방법 :

enter image description here

(가) 플레이어는 그녀가 재생되는 홈 버튼을 펄스. (b) 시스템 화면 캡처가 수행됩니다. (c) 플레이어가 게임 아이콘을 누릅니다. (d) 게임은 applicationWillResignActive에서 촬영 한 화면 캡처로 실행됩니다. (e) 빠르게 움직이는 물체의 불일치를 보여주는 게임이 일시 중지되었습니다.

+1

언제 게임을 일시 중지 했습니까? '_saveSnapshotWithName :'에 중단 점을 넣고 호출 시점을 볼 수 있습니다. –

+0

@LeoNatan applicationWillResignActive에서 스크린 샷을 찍었지만 applicationWillResignActive에서 스크린 샷을 찍었지만 결과는 동일합니다. – rraallvv

+0

게임이'applicationWillResignActive'에서 일시 중지 된 경우'applicationDidEnterBackground '정확해야합니다. 아마도 귀하의 문제는 돌아 오는 것입니다. –

답변

0

게임 렌더링이 메인 스레드가 아니기 때문에 (확실하게 메인 스레드에 있어서는 안 됨) applicationDidEnterBackground/applicationWillResignActive이 반환되면 시스템은 비디오 카드의 버퍼에서 즉시 스크린 샷을 가져옵니다.

현재 게임 루프 스레드가 실행 중이므로 일부 프레임이 일시 중지되기 전에 업데이트 될 수 있습니다.

나는 당신이 당신의 게임 루프를 구현하는 방법을 모른다, 그러나 당신이 시도 할 수 있습니다 : 세마포어를 관찰, 게임 루프에서 주 스레드를 applicationDidEnterBackground/applicationWillResignActive에서

는 글로벌 세마포어 (dispatch_semaphore_t)을 넣어 및 차단 존재하는 경우 게임 루프를 일시 중지 한 다음 세마포를 신호로 보냅니다.

이렇게하면 게임이 일시 중지 된 후 스크린 샷이 찍히게됩니다.

applicationWillResignActive 이후에 시스템이 작업 전환기에 대한 스냅 샷을 취하고 applicationDidEnterBackground 이후에 시스템이 다음에 앱이 포 그라운드로 들어갈 때 스냅 샷을 찍습니다.

희망이 도움이 될 것입니다.