2010-11-18 9 views
1

나는 iPhoto 스크립팅 브리지가있는 커버 플로우 모양의 이미지 회전식 슬라이드 쇼 사진을 가지고 있습니다. 첫 번째 응답자를 수락하고 왼쪽 및 오른쪽 화살표에 대한 메서드를 구현하도록 뷰를 설정했지만 개념적으로 레이어를 클릭 할 수있게 만드는 방법을 파악할 수는 없습니다. 마우스 다운 이벤트를 수락하는 것은 뷰가 포함 된 작업이라는 것을 알고 있지만 조각을 머리에 함께 넣을 수는 없습니다.클릭 가능한 CALayer UI

일반적인 점은 버튼과 같은 UI 객체로 CALayers를 만들려는 것입니까? 왜냐하면 그들은 다른 방식으로 매우 유연하기 때문에 나는 그들과 일하는 것을 좋아합니다.

감사합니다.

답변

3

좋아,이게 내가 함께 연결 한 것입니다. 컨텍스트에서는 레이아웃 관리자가 내장되어있는 한 하위 레이어 (CATextLayer)가있는 사용자 정의보기가 있습니다. 다음은 CustomView.m의 awakeFromNib입니다.

- (void) awakeFromNib { 

CALayer *layer = [CALayer layer]; 
layer.backgroundColor = [CGColorHolder black]; 
layer.layoutManager = [CAConstraintLayoutManager layoutManager]; 
[self setLayer:layer]; 
[self setWantsLayer:YES]; 

CATextLayer *textLayer = [CATextLayer layer]; 
textLayer.string = @"TextLater"; 
textLayer.name = @"textLayer"; 
textLayer.fontSize = 42.0f; 
textLayer.alignmentMode = kCAAlignmentCenter; 
[textLayer addConstraint:[CAConstraint constraintWithAttribute:kCAConstraintMidX relativeTo:@"superlayer" attribute:kCAConstraintMidX offset:0.0f]]; 
[textLayer addConstraint:[CAConstraint constraintWithAttribute:kCAConstraintMaxY relativeTo:@"superlayer" attribute:kCAConstraintMaxY offset:-50.0f]]; 

} 

그런 다음 사용자 정의보기에 대해 mouseDown 메서드를 오버라이드합니다. -hitTest를 사용하여 mousedown이 발생한 지점을 포함하는 레이어를 반환 한 다음 레이어의 일부 속성을 설정하여 해당 지점이 맞았는지 표시합니다. 나는 이것이 정말 정교한의 관점에서 나를 걸리는까지 모르는

[window acceptsMouseMovedEvents]; 

:

- (void)mouseDown:(NSEvent *)theEvent { 

CALayer *layer = [self.layer hitTest:NSPointToCGPoint([theEvent locationInWindow])]; 
layer.backgroundColor = [CGColorHolder red]; 

} 또한

, 당신은 반드시 포함하는 윈도우가의 mouseMoved 수락 이벤트를 확인해야합니다 UI. 여기에서 리턴 된 이름을 기반으로 리턴 된 레이어로 할 일을 위임 할 것입니다. 하지만 그건 정말 못 생겼어. 그래서 내가 여기서 내 자신의 질문에 대답을했지만, 나는 정말로 그들이 무엇을하는지 알고있는 누군가로부터 약간의 정보를 얻고 싶다! : D 고마워!