我有一个类似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谢谢!