Хорошо, это то, что я собрал.В контексте у меня есть пользовательское представление с одним подуровнем (CATextLayer), которое я ограничиваю встроенным менеджером макета.Вот awakeFromNib в CustomView.m
- (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];
Я не знаю, как далеко я уйду с точки зрения действительно сложного пользовательского интерфейса.Отсюда я, вероятно, делегирую, что делать возвращаемому слою на основе возвращенного имени.Но это может быть ужасно быстро, поэтому, хотя я и ответил на свой вопрос здесь, мне бы очень хотелось получить информацию от кого-то, кто действительно знает, что они делают!: D Спасибо!