2016-04-06 11 views
0

に描いていないが、私はビューベーステーブルビューをカスタマイズし、カスタマイズNSViewの中で、私はINITで書く:CAShapeLayerの問題 - nstableview

NSRect testRect = imageViewRect; 

CGMutablePathRef roundPath = CGPathCreateMutable(); 
CGPathAddArc(roundPath, NULL, 
      [self arcCenter:testRect].x, 
      [self arcCenter:testRect].y, 
      ArcRadius, 
      2 * M_PI + M_PI_2, 
      M_PI_2, 
      YES); 

self.backgroundLayer = [CAShapeLayer layer]; 
self.backgroundLayer.frame = testRect; 
self.backgroundLayer.path = roundPath; 
self.backgroundLayer.strokeColor = [[NSColor blueColor] CGColor]; 
self.backgroundLayer.fillColor = nil; 
self.backgroundLayer.lineWidth = 5.0f; 
self.backgroundLayer.lineJoin = kCALineJoinBevel; 
[self.layer addSublayer:self.backgroundLayer]; 
[self.backgroundLayer setFillColor:[NSColor yellowColor].CGColor]; 

が、層が示されていない、私は本当に分かりません問題はどこだ。

これをビューに書き込み、ビューをウィンドウにロードすると、レイヤーが正しく表示されます。

答えて

1

ビューを「自己」にレイヤーバックアップされたビューに切り替えましたか?あなたがいずれかの層に関連する操作を行うことができます前に、

self.wantsLayer = true

を言う必要があります。 documentation引用

- trueにこのプロパティの値を設定

は 層バックアップビューそれにビューであり、ビューは そのレンダリングされたコンテンツを管理するためのCALayerオブジェクトを使用オン。レイヤーバックビューを暗黙的に作成すると、そのビューの下にあるビュー階層全体がレイヤーバックになります( )。 したがって、ビューとそのすべてのサブビュー(サブビューは のサブビューを含む)はレイヤーでバックアップされます。このプロパティのデフォルト値は falseです。

+0

本当にありがとうございました。しかし私のデモでは、wantLayerビューをyesに設定していませんでした。デフォルトではNOです。 – melody5417

+0

助けてくれてありがとう、私はちょうど私が受け入れられた答えをマークするためにチェックをクリックする必要があることを知っています。 – melody5417