2011-10-25 1 views
2

동적 장치 방향을 지원하는 OpenGL 앱이 있습니다. 장치를 4 가지 방향 중 하나로 회전시킬 수 있으며 모든 것이 예상대로 작동합니다.모달 뷰 컨트롤러를 표시하는 동안 장치 회전

이제 모달 뷰 컨트롤러를 추가하여 설정보기를 얻을 수 있습니다 (비 OpenGL 임). 모달 뷰 컨트롤러는 모든 장치 방향도 지원합니다.

그러나 모달 뷰 컨트롤러를 오리엔테이션 A (예 : 세로)로 표시하고 오리엔테이션 B (예 : 가로 - 오른쪽)로 표시를 해제 한 경우, 축소 된 후 OpenGL보기가 손상됩니다 (가로 세로 비율이 잘못 보입니다) . OpenGL보기가 자체를 '수정'하기 위해 장치를 다른 방향으로 배치해야합니다.

모달 뷰 컨트롤러가 닫히면 앱이 이미 방향 B에 있다고 생각하는 것처럼 보이므로 OpenGL보기를 회전시키지 않습니다.

모달 뷰 컨트롤러에서 회전을 비활성화 한 경우 모달 컨트롤러를 방향 A로 표시하면 장치가 방향 B (모달 뷰 컨트롤러가 더 이상 회전하지 않음)로 회전하고 컨트롤러를 닫을 때 OpenGL보기는 willRotateToInterfaceOrientation/didRotateFromInterfaceOrientation 방향 B 올바르게 방향을 지정하십시오.

모달 컨트롤러의 동적 방향을 유지하면서 모달 컨트롤러를 닫은 후에도 OpenGL보기도 제대로 회전 할 수 있습니까?

감사합니다.

+0

OpenGL보기를 업데이트하기 위해 회전 변경을 감지하는 데 사용하는 메커니즘은 무엇입니까? 프레임을 조정할 수있는 OpenGL보기의 프레젠테이션을 관리하는 것은 무엇입니까? – Jonah

+0

OpenGL 뷰 컨트롤러의 shouldAutorotateToInterfaceOrientation은 YES를 반환합니다. willRotateToInterfaceOrientation은 OpenGL 뷰 컨트롤러에서 호출됩니다. layoutSubviews는 OpenGL 버퍼를 해제하는 OpenGL보기에서 호출됩니다. 다음 번에 렌더 함수가 호출되면 OpenGL 버퍼가 스왑 된 너비/높이로 다시 생성됩니다. – iraxef

+0

모달을 세로로 고정했을 때 어떻게 작동 시켰습니까? 나는 그와 똑같은 문제를 안고있다 – jfisk

답변

1

사용자 지정 작업 시트에서 비슷한 문제가 있었으며 가장 간단한 대답은보기가 표시되는 동안 일시적으로 회전을 허용하지 않기로 결정한 것입니다. Apple Notes 앱에서 작업 예제가 표시 될 때마다 방향이 잠기 게 될 때마다이 예제를 볼 수 있습니다.

나는 이미이 도구를 사용해 보았지만 제대로 작동한다는 것을 알고 있습니다. 나는 이것을 올바른 해결책으로 생각해야한다고 생각합니다.

다른 방법으로 해결할 방법이 확실하지 않은 경우, 모달보기 컨트롤러에서 방향 변경 사항을 저장하고 동시에 또는 한 번 시점에서 OpenGL보기 컨트롤러로 다시 전달해야합니다 설정보기를 닫은 다음 수동으로 다시 렌더링하십시오.

+0

좋은 지적 ..! :) – NightFury