2010-11-18 64 views
1

我有一個類似Coverflow的圖像輪播抓取帶有iPhoto腳本橋的照片。我已將視圖設置爲接受第一響應者,並實施了左右箭頭的方法,但從概念上無法弄清楚如何使圖層可點擊。我知道接受鼠標事件是包含視圖的工作,但我不能把這些作品放在我的腦海中。可點擊的CALayer用戶界面

一般的問題是我應該甚至試圖讓CALayers進入像按鈕等UI對象?因爲他們在其他方面非常靈活,我喜歡與他們合作。

謝謝!

回答

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發生點的圖層,然後設置圖層的某個屬性以顯示它已被擊中。

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

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

}

而且,你必須確保包含窗口受理的mouseMoved事件:

[window acceptsMouseMovedEvents]; 

我不知道這將在多大程度上把我在一個非常複雜的術語UI。從這裏,我可能會根據返回的名稱將返回的圖層委託給返回的圖層。但是,這可能會很快變得醜陋,所以儘管我在這裏回答了我自己的問題,但我真的很想從一個真正知道他們在做什麼的人那裏得到一些輸入! :D謝謝!