2

iOS 5 で Core Plot 1.0 を使用して、散布図を使用して xy グラフのカスタム ティック位置にアイコンを描画しています。iPad 3 で、ユーザーの操作を可能にし、グラフを水平方向にスクロールすると、パフォーマンスの問題が発生します。CPTGraphHostingView の collapsesLayers プロパティを潜在的な解決策として使用することを検討し始めました。まだ解決できていない特定の問題を除いて、それを有効にすることは私にとって非常にうまく機能します. 画像をレンダリングするために設定したカスタム軸ラベルが表示されません。何が原因なのか考えている人がいるかどうか疑問に思っています。私が知る限り、軸ラベルはまだ正しいカスタム目盛りの位置に適切に配置されています。私の外部コードの唯一の違いは、collapsesLayers を NO から YES に交換することです。

軸ラベルを作成する方法は次のとおりです。

+ (CPTAxisLabel *)buildIconAxisLabelAtLocation:(CGFloat)location withImageNamed:(NSString *)imageName
{
CPTLayer *imageLayer = [[CPTLayer alloc] initWithFrame:CGRectMake(0, 0, 16, 16)];

UIImage *image = [UIImage imageNamed:imageName];

CALayer *imageSubLayer = [[CALayer alloc] init];
imageSubLayer.frame = imageLayer.frame;
imageSubLayer.contents = (id)image.CGImage;

[imageLayer addSublayer:imageSubLayer];

CPTAxisLabel *iconLabel = [[CPTAxisLabel alloc] initWithContentLayer:imageLayer];
iconLabel.offset = 8;
iconLabel.tickLocation = CPTDecimalFromCGFloat(location);
iconLabel.rotation = M_PI;

return iconLabel;
}

どんな助けでも大歓迎です。

4

1 に答える 1

2
  1. コア プロット グラフのすべてのレイヤーは、CPTLayerまたはサブクラスである必要があります。これは、レイアウトと描画に多くの影響を与えます。

  2. Core Plot はレイヤーをレンダリングしませんcontentsCPTBorderedLayer代わりに画像の塗りつぶしを使用してください。

私はこのようなことを試してみます:

UIImage *image = [UIImage imageNamed:imageName];
CPTImage *background = [CPTImage imageWithCGImage:image.CGImage];
CPTBorderedLayer *imageLayer = [[CPTBorderedLayer alloc] initWithFrame:CGRectMake(0, 0, 16, 16)];
imageLayer.fill = [CPTFill fillWithImage:background];   
于 2012-08-28T00:14:34.030 に答える