2010-11-18 12 views
1

私はiPhotoスクリプトブリッジでカバーフローのような画像カルーセルをつかむ写真を持っています。私は最初のレスポンダーを受け入れるように設定し、左右の矢印のメソッドを実装しましたが、レイヤーをクリック可能にする方法を概念的に理解することはできません。私は、マウスダウンのイベントを受け入れることはビューの仕事を含んでいることを知っていますが、私は一緒に私の頭の中に一緒に作品を配置することはできません。クリック可能なCALayer UI

私はさらに、ボタンのようなUIオブジェクトにCALayersを作成しようとしていますか?彼らは他の方法で非常に柔軟性があり、私は彼らと一緒に働くことが大好きです。

ありがとうございます!

答えて

3

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

関連する問題