2009-11-17 7 views
0

루이 - 입력 해 주셔서 감사합니다. 여기에 내가 한 일과 내가 이해하지 못하는 현재의 이슈가있다.iPhone 레이어 관리 - 모범 사례

메뉴 (2)는 터치에 반응하는 UIImageViews입니다. 각각은 자신의 클래스입니다. 당신이 그들에게 전화했을 때 '스프라이트'는 또한 터치에 반응합니다.

.m에서 레이어에 메뉴와 스프라이트를 추가하면이 코드를 통해 두 개의 컨테이너 레이어가 만들어졌습니다 : menuContainer = [CALayer 레이어].

spriteContainer 위의 menuContainer를 사용하여 주문했습니다. 이제 스프라이트가 메뉴 아래로 이동합니다. 그러나이 과정에서 스프라이트가 touch에 반응을 멈췄다. (menuContainer 레이어 아래에 있기 때문에 이것을 이해할 수있다.) 메뉴가 터치에 반응을 멈췄다. 상황을 계속 혼란스럽게 만들면 슬라이더를 팝업하여 멀티 터치 제스처에 응답하는 menuContainer에 추가 된 레이어가 멀티 터치를 읽고 슬라이더를 팝업하지만 슬라이더를 슬라이드 할 수 없습니다. 이것은 완전히 혼란 스럽습니다.

감사합니다.

내 앱에서 배경 레이어를 만든 다음 항상 맨 위에 있어야하는 메뉴 레이어를 만듭니다. 그런 다음, 많은 이동 레이어를 추가하고 많은 이동 레이어를 매우 빠르게 제거합니다.

내 문제는 내 메뉴 레이어 (4 개가 있음)를 항상 다른 레이어 앞에 두는 것입니다. 나는 레이어 hiearchy를 만들고 insertsublayer : atindex : 메서드를 사용하여 내 메뉴를 1000의 개념 인덱스로 만들고 200과 같이 더 낮은 인덱스에 움직이는 레이어를 삽입하는 방법을 생각했습니다. 한 레이어를 200으로 삽입하면 다음 200, 200에 할당 된 첫 번째 레이어가 (201로) 이동되거나 멀리 날아가 버릴 수 있습니까?

insertsublayer : below :를 사용하여 레이어를 삽입하려했지만 원하는 결과를 얻지 못했습니다.

도움 주셔서 감사합니다.

+1

이것은 좋은 질문입니다. 또한 왜 애플이 Z 좌표 (Z-coordinate) 속성의 형태로 Z 순서 메커니즘을 포함하지 않았는지 궁금합니다. – Amagrammer

+1

CoreAnimation-Layers에 대해 이야기하고 있다고 가정하면 실제로 zPosition 속성이 있으며 추가적으로 자유롭게 조정 가능한 CATransform3D가 있음을 알게 될 것입니다. 그러나 두 속성은 형제에 대해서만 고려됩니다. 따라서 본격적인 3D 객체/애니메이션이 필요한 경우 CoreAnimation을 사용할 수 없습니다. 어떤 레이어가 다른 레이어 위에 또는 아래에 그려지는지 계산하는 것은 삽입 순서입니다. – Till

+0

사실, CATransformLayer 내에 많은 수의 레이어를 배치하면 꽤 정교한 3D 효과를 복제 할 수 있습니다. 유일하게 실제적인 한계 인 3-D-wise는 CALayers가 직각이어야한다는 것입니다. –

답변

2

정말 그렇게 할 수는 없지만 레이어 인덱스는 z- 순서가 아니며 배열 인덱스입니다. documentation에서 :

이 값 하층의 배열 요소 수보다 크지 않아야한다.

나는 당신이 최상급이 될 것이라고 생각하지만 실제로 모든 활성 레이어를 하나의 슈퍼 레이어로 밀어 넣는 것과는 대조적으로 실제로 레이어 계층을 만듭니다. 컨테이너 레이어에 다른 사람의 모든 menulayers, 그럼 당신이 그것을 원하는 루트 레이어에 삽입합니다. 마찬가지로 모든 스프라이트를 하나의 컨테이너 레이어에 넣고 원하는 곳에 루트 레이어에 배치하십시오. 편집에 따라

추가 재료 :

레이어들이 직접 이벤트에 응답하지 마십시오 기본적으로 그래픽 구조입니다. 첨부 된 뷰에서 hitTest 코드를 작성하거나 레이어 대신 UIView를 사용해야하는 경우 직접 처리해야합니다. 뷰 계층 구조와 계층 구조가 일관된 방식으로 레이어를 조작했기 때문에 이전에는 아마 그걸 사용하고 있었을 것입니다. 원래의 질문에서보기를 사용하고 순수한 레이어 기반이 아니라는 점은 분명하지 않았습니다. 설정.

+0

루이, 설명서의 주석에서 같은 것을 생각했지만 doc 지오메트리에 따라 문서 사이트의 페이지를 변형합니다. "zPosition 속성은 레이어 위치의 z 축 구성 요소를 지정합니다 .zPosition은 레이어의 시각적 위치를 형제 레이어에 상대적으로 설정하는 데 사용되며 하위 레이어 배열의 레이어 순서를 바꾸지 않고 레이어 형제 순서를 지정하는 데 사용해서는 안됩니다. " 나에게 레이어 인덱스 *가 * z- 오더라고 제안합니다. 나는 이것을 확인하기 위해 약간의 코드를 작성했으며, 사실 인 것으로 보인다. –

+0

내가 완전히 분명하지는 않았다. 인덱스는 무엇 위에 무엇이 표시되는지를 절대적으로 결정합니다. 따라서 어떤 의미에서는 z 순서입니다. 그러나 임의의 값으로 설정할 수없고이를 기반으로 일관되게 주문할 수 없다는 점에서 일반적인 z- 순서가 아닙니다. 다른 레이어를 삽입 할 때 다양한 레이어의 인덱스가 변경됩니다. –

-1

루이 - 입력 해 주셔서 감사합니다.여기에 내가 한 일과 내가 이해하지 못하는 현재의 이슈가있다.

메뉴 (2)는 터치에 반응하는 UIImageViews입니다. 각각은 자신의 클래스입니다. 당신이 그들에게 전화했을 때 '스프 라이트'는 또한 터치에 반응합니다.

.m에서 레이어에 메뉴와 스프라이트를 추가하면이 코드를 통해 두 개의 컨테이너 레이어가 만들어졌습니다 : menuContainer = [CALayer 레이어].

spriteContainer 위의 menuContainer를 사용하여 주문했습니다. 이제 스프라이트가 메뉴 아래로 이동합니다. 그러나이 과정에서 스프라이트가 touch에 반응을 멈췄다. (menuContainer 레이어 아래에 있기 때문에 이것을 이해할 수있다.) 메뉴가 터치에 반응을 멈췄다. 상황을 계속 혼란스럽게 만들면 슬라이더를 팝업하여 멀티 터치 제스처에 응답하는 menuContainer에 추가 된 레이어가 멀티 터치를 읽고 슬라이더를 팝업하지만 슬라이더를 슬라이드 할 수 없습니다. 이것은 완전히 혼란 스럽습니다.

감사합니다.

+0

이것은 실제로 대답이 아닙니다. 그것은 귀하의 질문에 대한 편집이어야합니다. –