2011-12-29 3 views
1

회전과 함께 약간의 멋진 작업을하고 있으며 shouldAutorotateToInterfaceOrientation:에서 NO을 반환하고 있습니다. 그런 다음 [UIDevice currentDevice].orientationCached에 따라 UIWebView을 수동으로 회전합니다. 링크에서 손가락을 아래로 잡았을 때 표시되는 메뉴는 세로 방향이 항상 같고, 장치 방향이 어떻든 상관없이 UIWebView의 방향에 관계없이 나타납니다. 그것은 링크 메뉴처럼 나에게 보이는UIWebview - "열기/복사"대화 상자가 잘못된 방향으로 열림

오히려 그와 관련된 UIWebView보다, 뷰 컨트롤러의 기본보기에서 방향을 소요하고 올바르게 행동 할 수있는 유일한 방법은 -shouldAutorotateToInterfaceOrientation:에서 YES를 반환하는 것입니다.

이 가정이 맞습니까? 링크 관련 팝업 메뉴의 방향을 제어하거나 방향을 바꿀 수있는 방법이 있습니까? UIWebView에서이를 생성합니까?

답변

0

"팝업 메뉴"란 Action SheetOpen ... Copy 버튼으로 사용 하시겠습니까?

그렇다면 Action Sheet은 항상 상단보기 컨트롤러의 interfaceOrientation에 따라 표시됩니다. 제어기가 interfaceOrientation을 업데이트하지 않고 직접보기를 돌리므로 Action Sheet은 여전히 ​​초상화라고 생각합니다.

1

UIWebView에서 실제로 어떻게 방향을 설정하지 않았습니까? 대신 코드를 통해 부모보기 컨트롤러 방향을 강제로 지정하십시오.

비슷한 상황의 예로, 몇 가지보기에서지도를 표시하는 개발 한 앱이 있습니다. 세로에서 가로로 회전 할 때 멋진 애니메이션으로 세로 레이아웃과 매우 다른 방식으로 뷰를 레이아웃합니다. 내가 좋아하지만 일부 사용자는 그렇지 않으므로지도 회전을 사용하지 않도록 설정할 수있는 옵션을 제공합니다. 그리고 저는 특정 회전 능력 만 상위 뷰에 전달하여이를 수행합니다. 따라서 가로를 사용하지 않으면 부모보기 컨트롤러에만 가로 방향으로 회전 할 수 있다고 말합니다. 그렇지 않으면 위 아래를 제외한 모든 방향으로 자유롭게 회전 할 수 있습니다. 설명 그만

: 여기에 나는이 작업을 수행하는 데 사용하는 내 관련 코드입니다 :

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation { 
    //Rotate the view if rotation is actually enabled 
    if ([self.prefs boolForKey:@"SHOULD_ROTATE"]) { 
     return (UIInterfaceOrientationIsLandscape(toInterfaceOrientation) || UIInterfaceOrientationPortrait == toInterfaceOrientation); 
    } 

    //Rotate it to portrait only if rotation is disabled 
    else if (![self.prefs boolForKey:@"SHOULD_ROTATE"]) { 
     return (UIInterfaceOrientationPortrait == toInterfaceOrientation); 
    } 

    //Otherwise, rotate only to portrait (for all views minus the map views) 
    else { 
     return (UIInterfaceOrientationPortrait == toInterfaceOrientation); 
    } 
} 

내가 실제로 응용 프로그램의 모든 뷰와 뷰 컨트롤러에 적용되도록 UITabBarController에서이를 구현하지만 단지 부모보기 컨트롤러 UIWebView에 대해서만 쉽게 구현됩니다. 요지는보기 방향이 원하는 것과 일치하는지에 따라 예 또는 아니오로 돌아가는 것입니다. 웹보기를 들어,이 반환에 의해 유일하게 허용 회전 방향을 배치 할 것 : 물론

return (UIInterfaceOrientationIsLandscape(toInterfaceOrientation) 

을, 나는 가로보기로보기를 설정보기를 강제 논의하지 않은 것만을 일단 사용자가 그것을 바꾼다. 그래서 최선의 조치는 뷰가 초기화되면 수동으로 할 단순히이 :

[[UIApplication sharedApplication] setStatusBarOrientation:UIDeviceOrientationLandscapeLeft animated:NO] 

당신은 그것을 어느 Left 또는 Right로 시작하도록 설정해야하지만, 사용자가 오른쪽 사이에 회전 할 수 이전 코드를 구현하면 원하는대로 남겨 두었습니다.

많은 설명이 있지만 부모보기 컨트롤러에 대한이 두 가지 방법을 조합하면 원하는 방식으로보기를 정확하게 표시 할 수 있습니다. 궁금한 점이 있으면 알려주세요.

+0

내 문제는보기를 적절하게 표현하는 것이 아니라 관련된 "사본/붙여 넣기"메뉴입니다. UIView 올바른 방향으로 표시되지만 "복사/붙여 넣기"메뉴 않습니다. – morgancodes

+0

맞아요. 더 나은 방법을 사용하여보기를 회전하면 복사 및 붙여 넣기 메뉴가 올바르게 표시되고 이처럼 다른 이상한 사항도 앞으로 해결 될 것입니다. –

관련 문제