2014-01-27 2 views
4

에 불균일로 호출됩니다. 내 앱이 백그라운드로 이동하면 데이터 보호를 위해 현재 화면이 흐려집니다. 화면의 내용은 작업 관리자 창에 나타나서는 안되기 때문에 앱이 종료되기 전에 흐리게 루틴을 완료해야합니다. 모든 UI가 업데이트 될 때 주 루프에서 블러 링이 발생해야합니다. 일반 기본보기 위에 흐린보기가 추가됩니다. 그러나이 작업을 완료하는 데 약간의 시간이 걸리며 문제가됩니다.iOS가 applicationWillResignActive : 및 applicationDidBecomeActive :

Apple에서 권장하는대로 내 applicationWillResignActive :에서 내 흐림 루틴을 호출합니다. 이제 작업을 완료하는 데 0.2 초가 걸린다고 가정 해 봅시다. 이 짧은 기간 내에 응용 프로그램이 다시 활성화되면 applicationDidBecomeActive :가 호출되지 않습니다. 그러면 화면이 흐려지기 때문에 흐려집니다.

어쩌면 당신은 짧은 시간에 앱을 "닫고"열 수 있지만 우연히 화면의 위쪽 가장자리를 두드리고 조금 아래로 내려가는 것을 생각하면 어떨까요 상단 모서리에있는 버튼을 탭하려고합니다. 그러면 알림 센터가 몇 분의 1 초 정도 만 활성화됩니다. 충분 해.

그냥이 문제가 투명하게 만들기위한, 콘솔의 불균형 전화를 게시 할 예정이 AppDelegate에 한 번 봐 가지고 :


    @implementation UHAppDelegate 

    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
    { 
     return YES; 
    } 

    - (void)applicationWillResignActive:(UIApplication *)application 
    { 
     NSLog(@"applicationWillResignActive - performing some tasks..."); 

     // let the main loop do some work... 
     [[NSRunLoop currentRunLoop] runUntilDate:[NSDate dateWithTimeIntervalSinceNow:0.2]]; 
    } 

    - (void)applicationDidEnterBackground:(UIApplication *)application 
    { 
    } 

    - (void)applicationWillEnterForeground:(UIApplication *)application 
    { 
    } 

    - (void)applicationDidBecomeActive:(UIApplication *)application 
    { 
     NSLog(@"applicationDidBecomeActive"); 
    } 

    - (void)applicationWillTerminate:(UIApplication *)application 
    { 
    } 

    @end 

모든 아이디어를 어떻게 균형 applicationWillResignActive 호출의 수를 달성하는 방법 :와 applicationDidBecomeActive를 : 이 경우 ...? 이 의미가 있도록

들으 당신의 도움을 많이 우도는

+0

위와 같이 작성한 응용 프로그램 WillResignActive는 아무 것도하지 않습니까? – GuybrushThreepwood

+0

- 메인 루프의 다른 메소드 호출과 마찬가지로 콘솔에 노트를 게시하고 0.2 초 동안 메인 루프를 차단합니다. –

+0

알림 센터를 "드래그 다운"하여 정상 속도로 실행하고 다시 위로 올리면 균형 잡힌 통화 로그 ("applicationWillResignActive - 일부 작업 수행"및 "위로 넘김": "applicationDidBecomeActive "). 그러나 화면 상단의 빠른 "탭 & 플립 다운/플립 업"을 수행하면 응용 프로그램이 다시 활성화되었지만 "applicationWillResignActive - 일부 작업 수행"만 나타납니다. –

답변

1

몇 가지 테스트를 마친 후 일부 절충안을 사용할 수 있음을 알고 있습니다. applicationDidEnterBackground :와 만 균형 :

이 applicationDidBecomeActive이 보인다

내 경우

이는 흐림는 후자의 방법으로 이루어져야한다는 것을 의미한다.결국 사용자가 알림 센터를 호출하거나 작업 관리자를 호출하여 내 앱을 "떠날"경우 스크린이 흐려지지 않게됩니다. 그러나 데이터 보안과 관련해서는 내 앱에 액세스 할 수있는 사용자 만이이 단계를 수행 할 수 있기 때문에 과중한 문제는 아니어야합니다.

응용 프로그램을 한 번 클릭하거나 대기 모드로 전환하거나 작업 관리자가 전경 응용 프로그램을 변경하여 응용 프로그램을 종료하면 applicationDidEnterBackground :가 호출되고 일부 테스트 후에 OS에서 충분한 시간이 경과 한 것처럼 보입니다. 메인 루프에 흐리게.

그러나 원래 문제를 고집하면 여전히 해결되지 않았습니다.

0

응용 프로그램이 -applicationWillResignActive() 메소드가 완료 전에 다시 "활성화됩니다"하면, 그것은 완전히 활성 상태를 사임하지 않았을 수도 있습니다 그것은 그 활성 상태가 전혀 변경되지 않았으므로 -applicationDidBecomeActive()에 대한 호출을 트리거하지 않을 수 있습니다.

1) 당신의 멤버 응용 프로그램 대리인으로 "showingBlur"라는 부울 값을 생성하고 -applicationDidFinishLaunching 방법에서 NO로 설정 :

나는 이것을 시도 할 것입니다.

2) -applicationWillResignActive()에서 UI 업데이트를 시작하기 전에 "showingBlur"를 YES로 설정하십시오.

3) applicationWillEnterForeground()에서 Boolean을 확인하고 true이면 흐림보기를 제거하고 false로 설정합니다.

또는이 : 당신이 당신의 흐림보기를 만들 때

1)도 모두 자체 흐림이 화재를 처음 볼 삭제 전경 타이머를 만들 수 있습니다. 이렇게하면 타이머를 만들 때 즉시 백그라운드에서 응용 프로그램을 배경으로 실행합니다. 그러나 응용 프로그램을 열면 즉시 실행되고 삭제되며 흐림보기가 제거됩니다.

희망이 도움이됩니다.

+0

문제는 applicationWillEnterForeground()가 호출되지 않는다는 것입니다. 앱이 다시 활성화 될 것이라는 사실에 대한 정보가 전혀 없습니다. - 두 번째 아이디어를 시도해 봅니다! –

+0

타이머 아이디어를 사용해 보았습니다. 앱이 이미 백그라운드로 이동 했더라도 타이머가 작동한다고해서 유감입니다. –

관련 문제