2011-05-13 5 views
1

서브 뷰 (이미지, 텍스트 등)가있는 NSView를 가지고 myView.layer.transform = myTransform을 사용하여 3d 변형을 적용하고 싶습니다.서브 뷰가있는 NSView에서 layer.transform을 설정할 수 있습니까?

문서를 읽은 후 허용 된 것인지 혼란 스럽습니다. 레이어가 지원되는보기 인 경우 레이어와 직접 상호 작용하지 않아야하므로 변환 설정이 잘못되었습니다.

레이어 호스팅보기 인 경우 하위보기가 필요하지 않습니다.

layer.transform을 설정하려면 CALayer를 통해 모든 드로잉을 설정하고 하위 뷰 사용을 중단해야한다는 의미입니까?

답변

1

중첩 된 하위 뷰 인 NSScrollViews가있는 NSView에 CALayer 애니메이션을 설정하면 정상적으로 작동합니다. 나는이 제한이 겹쳐지고 중첩 된 관점에 있다고 생각한다. (후자의 문제는 지정된 그리기 순서가 없다는 것이고 어떤보기가 맨 위에 표시 될지 예측할 수 없다는 것입니다.)

그러나 변환을 하위보기에도 적용하려면 다음과 같이 설정해야합니다. 레이어를 별도로 만듭니다. 또는 네, 하위 뷰를 덤프하고 모든 것을 단일 뷰의 CALayers에 둘 수 있습니다. 범위와 위치 속성을 사용하여 크기와 배치를 제어 할 수 있습니다.

레이어 호스팅을 수행하는 경우에는 변환을 루트 레이어 (view.layer)에 적용하지 마십시오. 대신 새로운 CALayer를 만들고, 내용을 추가하고, 변환을 추가하고이를 루트 레이어에 하위 레이어로 적용하십시오. 루트 계층을 직접 사용하지 마십시오. 레이어 호스팅 설정의

빠른 샘플 :

// Set up the root layer. 
[[self.aViewController view] setLayer:[CALayer layer]]; 
[[self.aViewController view] setWantsLayer:YES]; 
// Set up a sublayer. 
CALayer *sublayer = [CALayer layer]; 
[self.aViewController.view.layer addSublayer:sublayer]; 
// Repeat if you need additional sublayers. There's a name property if you need to distinguish between them. 
+0

+1 : 좋은 대답. 형제 뷰를 겹치게 만드는 것은 [신뢰할 수없는 동작]이있는 것으로 문서화됩니다 (http://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/CocoaViewsGuide/WorkingWithAViewHierarchy/WorkingWithAViewHierarchy.html#//apple_ref/doc/uid/TP40002978). -CH4-SW16). –

+0

응답 해 주셔서 감사합니다. 나는 이것을 시도했지만 기괴한 깜박임을보고 있었고 하위보기가 허용되지 않았기 때문에 그것이 될 수도 있다고 생각했습니다. 변환 속성을 변경하면 자동으로 깜박임이 발생하는 애니메이션이 추가됩니다. 또한 형제가 겹치기는하지만 트랜스 폼은 트랜스포머를 분리하고 잘 동작합니다. – initlaunch

관련 문제