2

次の方法を使用して、プロットのラベルを表示します。

-(CPTLayer *)dataLabelForPlot:(CPTPlot *)plot recordIndex:(NSUInteger)index{ 
 ... 
 CPTTextLayer *label=[[CPTTextLayer alloc] initWithText:stringValue style:textStyle];
 }

すべてのインデックスに対してラベルを返す必要があります

次を使用してラベルを上下に移動できることを知っています。

plot.labelOffset=10;

問題は、ラベルを少し右に移動するにはどうすればよいですか? 使ってみた

label.paddingLeft=50.0f;

しかし、うまくいきません。

4

3 に答える 3

1

CPTTextLayer をサブクラス化し、オフセットを含めることができます。

@interface WPTextLayer : CPTTextLayer

@property (nonatomic) CGPoint offset;

@end

@implementation WPTextLayer

-(void)setPosition:(CGPoint)position
{
    CGPoint p = CGPointMake(position.x + self.offset.x, position.y + self.offset.y);
    [super setPosition:p];
}

次に使用します。

WPTextLayer *tLayer = [[WPTextLayer alloc] initWithText:@"blah" style:textStyle];
tLayer.offset = CGPointMake(3, -3);
return tLayer;

私が気付いていない結果が生じる可能性がありますが、これまでのところ機能しているようです。

于 2015-11-17T13:56:45.177 に答える
1

私は同じ問題に遭遇し、別の解決策を思いつきました。

私がやろうと決めたのは、CPTAxisLabel メソッドの initWithContentLayer を使用してラベルを作成することでした。

CPTTextLayer *textLayer = [[CPTTextLayer alloc] initWithText:labelStr  style:axisTextStyle];

CGSize textSize = [textLayer sizeThatFits];

// Calculate the padding needed to center the label under the plot record.
textLayer.paddingLeft = barCenterLeftOffset - textSize.width/2.0;

CPTAxisLabel *label = [[CPTAxisLabel alloc] initWithContentLayer:textLayer];

ここで、barCenterLeftOffset はプロット レコードの中心のオフセットです。

私はこれについて記事を書きました:

http://finalize.com/2014/09/18/horizo​​ntal-label-positioning-in-core-plot-and-other-miscellaneous-topics/

このソリューションを使用して私が作成したデモ プロジェクトは、次の場所にあります。

https://github.com/scottcarter/algorithms

于 2014-09-18T18:57:13.543 に答える
1

あなたの例のようにパディングを追加しても機能しますが、期待どおりではない可能性があります。散布図と棒グラフでは、ラベルが各データ ポイントの中央に配置されます (正のオフセットを使用)。パディングによりラベル全体が広くなるため、中央に配置すると、テストが横にずれて表示されます。特にラベルのテキストの長さが異なる場合は、制御が困難です。

これに対処するための未解決の問題があります ( issue 266 )。いつ修正されるかは保証できませんが、検討中です。

于 2012-04-28T21:18:25.093 に答える