2011-12-06 4 views
3

UIWindow은 흰색 배경을 가지고 있습니다. 기기가 회전 할 때 배경을 파란색으로 (영구적으로) 변경하고 싶습니다. 그러나 실제로는 파란색이 잠시 파란색으로 깜박이고 다시 흰색으로 돌아갑니다. 예상대로장치 회전시 UIWindow 배경색 변경

- (void)application:(UIApplication *)application didChangeStatusBarOrientation:(UIInterfaceOrientation)oldStatusBarOrientation 
{ 
    self.window.backgroundColor = [UIColor blueColor]; 
} 

이 코드는 호출되는,하지만 (나는 UIWindow을 서브 클래스에 의해 발견으로) 회전 완료는, -[UIWindow setBackgroundColor:]이 두 번째로 호출 될 때

응용 프로그램의 위임에

. 두 번째 통화에 대한 호출 스택은 다음과 같습니다 (@ VinceBurn의 답변)

-[UIWindow setBackgroundColor] 
-[UIWindow _finishedFullRotation:finished:context:] 
-[UIViewAnimationState sendDelegateAnimationDidStop:finished:] 
-[UIViewAnimationState animationDidStop:finished:] 
-run_animation_callbacks 
... 

편집

응용 프로그램은 (엑스 코드의보기 기반 응용 프로그램 프로젝트 템플릿에서) 정확히 하나 개의보기가 있습니다. 이제 뷰의 배경색 (IB에서)을 0 % 불투명도로 설정했습니다. 여전히 같은 결과를 얻고 있습니다.

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {  

    // Override point for customization after application launch. 

    // Add the view controller's view to the window and display. 
    self.window.backgroundColor = [UIColor greenColor]; 
    [self.window addSubview:viewController.view]; 
    [self.window makeKeyAndVisible]; 

    return YES; 
} 

가 회전

, 그것은 잠시 파란색 깜박 만에 반환

는 지금 처음에 녹색으로 창의 배경 색상을 설정하고, 흰색 색상이 다른 기본 색상 설정에서오고 있지 않은지 확인하려면 녹색.

+0

처음에 흰색 배경을 어떻게 설정합니까? –

+0

@Kay - 제발 자세히 설명해주세요. – jlstrecker

+0

@VinceBurn - 어디서나 설정하지 않으려 고 노력했습니다. (기본값은 흰색입니다.)'-application : didFinishLaunchingWithOptions :'에서 설정하려고했습니다. 어느 쪽이든 같은 결과가 나타납니다. – jlstrecker

답변

5

대신 UIWindow의 활성 UIViewController의보기의 배경색을 변경하는 것이 었습니다 :

- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation 
{ 
    self.view.backgroundColor = [UIColor blueColor]; 
} 

이유 나는 UIWindow의 배경색을 설정하려고했다이었다 앱 전체에서 동일한 배경색을 얻을 수 있습니다. 앱을 구현하는 가장 간단한 방법은 UIViewControllerUIViewController 하위 클래스 인 -didRotateFromInterfaceOrientation:에서 상속받는 것입니다.

0

이 코드는 조금 나아졌지만 여전히 다른 것을 희망합니다.

- (void)changeColor 
{ 
    self.window.backgroundColor = [UIColor orangeColor]; 
} 
- (void)application:(UIApplication *)application 
willChangeStatusBarOrientation:(UIInterfaceOrientation)newStatusBarOrientation 
         duration:(NSTimeInterval)duration 
{ 
    // At first set it to the color 
    self.window.backgroundColor = [UIColor orangeColor]; 
    // And make it change again when the animation is finished 
    [self performSelector:@selector(changeColor) 
      withObject:self 
      afterDelay:duration + 0.005]; 
     // You may have to play with the add part of the duration this was working 
      in the simulator, but on device? 
} 

내 생각 엔 후드 방향이 CAAnimation을 변경하고, 당신이 밖으로 팀에게 또한 애니메이션을 설정해야합니다 있도록 CAAnimation의 새로운 속성 세트가 마지막에 집착하지 않는다는 것입니다. 내가하고 결국 무엇

+0

제 편집을 참조하십시오. – jlstrecker

+0

@jlstrecker 그건 그렇게 흥미 롭다. 나는 그것을 시도했다. 그리고 나는 그것을 고칠 수 없다. 변경 오리엔테이션을 위해 NSNotification에 등록하려고 시도했습니다. 문서에서 앱 위임자보다 나중에 호출하는 것으로 나타났습니다. 하지만 여전히 같은 결과가 나타납니다 ... –

+0

두 가지 장치에서 솔루션을 시도했습니다. 가로 방향으로 녹색으로 변하고 가로 방향으로 파란색으로 바뀌 었습니다. 장치의 '지속 시간'에 더할 시간은 0.2 또는 0.25 정도입니다. 결과적으로 이상적인 시간은 기기뿐 아니라 회전 방향 (가로 방향과 세로 방향)과 이전에 몇 번 회전했는지에 따라 다릅니다.시간이 너무 짧으면 색이 변하지 않으며 너무 길면 회전 후 색이 깜박입니다. 나는 다른 해결 방법을 시도 할 것이고 만약 내가 너의 것을 사용하게된다면 나는 그것을 답으로 표시 할 것이다. – jlstrecker