これは私がまとめたものです。コンテキストは、私が1つのサブレイヤ(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ありがとう!