1

ユーザーがクリックしてドラッグできるウィジェットをグラフに追加したいと考えています。CPTPlotSpaceAnnonation (データと一緒にスクロールしたいため) と CPTBorderedLayer を使用してこれを行うことができました。基本的な機能は動作するので、ウィジェットの外観を改善したいと考えています。これまでのところ、それは単なる緑色の円です。

次のコードは以下の円を生成します。影がレイヤーの四角形にクリップされ、境界線が円ではなくレイヤーに追従することに注意してください。

ここに画像の説明を入力

レイヤーではなく円をストロークするにはどうすればよいですか? レイヤーの枠を大きくすることでクリッピングを回避できると思います。Core Plot アノテーションで CAShapeLayer クラスを使用することは可能ですか? これは、ウィジェットを描画する簡単な方法です。

// Add a circular annotation to graph with fill and shadow
annotation = [[CPTPlotSpaceAnnotation alloc] 
                  initWithPlotSpace:graph.defaultPlotSpace 
                    anchorPlotPoint:anchorPoint];

// Choosing line styles and fill for the widget
NSRect frame = NSMakeRect(0, 0, 50.0, 50.0);
CPTBorderedLayer *borderedLayer = [[CPTBorderedLayer alloc] initWithFrame:frame];

// Circular shape with green fill
CGPathRef outerPath = CGPathCreateWithEllipseInRect(frame, NULL);
borderedLayer.outerBorderPath = outerPath;
CPTFill *fill = [CPTFill fillWithColor:[CPTColor greenColor]];
borderedLayer.fill = fill;

// Basic shadow
CPTMutableShadow *shadow = [CPTMutableShadow shadow];
shadow.shadowOffset = CGSizeMake(0.0, 0.0);
shadow.shadowBlurRadius = 6.0;
shadow.shadowColor = [[CPTColor blackColor] colorWithAlphaComponent:1.0];
borderedLayer.shadow = shadow;

// Add to graph
annotation.contentLayer = borderedLayer;
annotation.contentLayer.opacity = 1.0;
[graph addAnnotation:annotation];
4

1 に答える 1

0

レイヤーの境界パスを設定しないでください。代わりにcornerRadius、フレームの幅の半分に設定してください。

borderedLayer.cornerRadius = frame.size.width * 0.5;
于 2012-07-21T17:20:44.657 に答える