문제

나는 여러 펜촉이있는 iPhone 애플리케이션을 개발하고 있으며 풍경이 있어야합니다.

응용 프로그램은 info.plist 파일을 통해 조경 모드에서 시작하도록 설정됩니다.

두 개의 뷰 컨트롤러가 있습니다.FirstViewController 그리고 SecondViewController.

이들 각각에 대해 나는보기가 풍경에있는 펜촉 파일이 있습니다. 두 뷰 컨트롤러 모두 내에 추가됩니다 MainView 아울렛으로서의 펜촉, 그리고 그들의 견해는 게으르게 초기화됩니다.

응용 프로그램이로드되면 첫 번째보기는 예상대로 조경에 표시됩니다. 그러나 두 번째보기로 전환하면 장치 (또는 시뮬레이터)가 조경 상태로 유지되지만 장치가 초상화 모드 인 것처럼보기가 회전하여 인터페이스를 제동합니다.

둘다 UIViewController 클래스 다음 코드가 있습니다.

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
    return interfaceOrientation == UIInterfaceOrientationLandscapeRight;
}

그리고보기를 전환하려면 내 앱 대의원에서 다음을 수행하고 있습니다.

[viewController.view removeFromSuperview];
[window addSubview:secondViewController.view];

어디 viewController 그리고 secondViewController 보기 컨트롤러가 연결된 두 개의 매장입니다.

이것이 IB에서 두 번째보기가 보이는 방식입니다.Alt Text http://img27.imageshack.us/img27/4898/picture1ni.png

그리고 이것이 시뮬레이터에서 보이는 방식입니다.Alt Text http://img402.imageshack.us/img402/4866/picture2wt.png

두 번째보기가 왜 조경에 표시되지만 인터페이스가 회전 하는가?

나는 변형 속성을 다루고 싶지 않습니다. 왜냐하면 그것은 과도하게 보이기 때문입니다.

도움이 되었습니까?

해결책

나는 누군가가 당신에게 통찰력있는 반응을 줄 것이며 나는 무언가를 배울 것이기를 바라고이 질문을 주연시켰다. 슬프게도 나는 당신이 이것을 제대로 작동시키기 위해 변환을 사용해야 할까봐 두려운다. 다음은 문제를 해결하기 위해 최근에 사용했던 코드입니다.

- (void)forceLandscapeForView:(UIView *)theView {
  theView.transform = CGAffineTransformMakeRotation(degreesToRadian(90));
  theView.bounds = CGRectMake(0, 0, 480, 320);
  theView.center = CGPointMake(160, 240);
  [theView setNeedsLayout];
  [theView setNeedsDisplay];
}

그런 다음 새보기를 추가하면 현재 방향을 점검하고 필요한 경우 회전을 강제로합니다.

if (!UIDeviceOrientationIsLandscape([UIDevice currentDevice].orientation)) {
  [self forceLandscapeForView:_activeViewController.view];
}

물론 적절하게 응답하고 싶을 것입니다 shouldAutorotateToInterfaceOrientation 각보기 컨트롤러에서 :

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
  return UIInterfaceOrientationIsLandscape(interfaceOrientation);
}

대체 솔루션에 대해 듣고 싶습니다. 이 설정으로 알아 차린 한 가지주의 사항도 있습니다. 뷰 사이에 전환이 있고 해당 전환 중에 전화를 회전하면 뷰 방향이 잘못된 조경 방향에서 뒤집거나 "고정"할 수 있습니다. 뷰 사이를 탐색 할 때 휴대 전화를 뒤집어야합니다 (조경 오른쪽 대 좌파).

다른 팁

그것은 단지 제안 일 뿐이지 만 두 번째 뷰의 ghoodaotorotate 방법에서 아무도 반환하려고 시도 할 수 있습니다. 또는 IB의 초상화보기에서 만들려고 노력하십시오. 뷰는 (조경 모드에서) 올바르게로드 된 것으로 보이지만 ThoultaUtorotate 메시지를 받고 90도 회전했습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top