我有一個類似Coverflow的圖像輪播抓取帶有iPhoto腳本橋的照片。我已將視圖設置爲接受第一響應者,並實施了左右箭頭的方法,但從概念上無法弄清楚如何使圖層可點擊。我知道接受鼠標事件是包含視圖的工作,但我不能把這些作品放在我的腦海中。可點擊的CALayer用戶界面
一般的問題是我應該甚至試圖讓CALayers進入像按鈕等UI對象?因爲他們在其他方面非常靈活,我喜歡與他們合作。
謝謝!
我有一個類似Coverflow的圖像輪播抓取帶有iPhoto腳本橋的照片。我已將視圖設置爲接受第一響應者,並實施了左右箭頭的方法,但從概念上無法弄清楚如何使圖層可點擊。我知道接受鼠標事件是包含視圖的工作,但我不能把這些作品放在我的腦海中。可點擊的CALayer用戶界面
一般的問題是我應該甚至試圖讓CALayers進入像按鈕等UI對象?因爲他們在其他方面非常靈活,我喜歡與他們合作。
謝謝!
好吧,這是我拼湊在一起。上下文是我有一個自定義視圖與一個子層(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謝謝!