0

ピンチレコグナイザーを使用してプロットのサイズを変更する必要があります。左と下の小さな領域で「幅」と「高さ」を個別にサイズ変更できます。また、私のプロットは UIScrollView の内側にあり、水平方向にスクロールします

これは私のY軸ピンチコードです:

- (void)yAxisPinchPerformed:(UIPinchGestureRecognizer *)pinchRecognizer
{
    CGFloat recognizerScale = pinchRecognizer.scale;

    CPTXYPlotSpace *plotSpace = (CPTXYPlotSpace *)_graph.defaultPlotSpace;

    switch (pinchRecognizer.state) {
        case UIGestureRecognizerStateBegan:
        {
            _savedRange = plotSpace.yRange;
        }
            break;

        case UIGestureRecognizerStateChanged:
        {
            CGFloat scaledRange = recognizerScale * _savedRange;
            [plotSpace setYRange:scaledRange];
        }
            break;

        default:
            break;
    }
}

おそらく、表示領域だけでなく、プロット全体 (幅が広く、UIScrollView 内) を再描画するためです。私のプロットには、グラデーションで塗りつぶされた最大 100 本のバーが含まれています。充填をオフにしようとしましたが、少しだけ役に立ちました。

今、私はこれらの改善を持っています:

- (void)yAxisPinchPerformed:(UIPinchGestureRecognizer *)pinchRecognizer
{
    CGFloat recognizerScale = pinchRecognizer.scale;



    switch (pinchRecognizer.state) {
        case UIGestureRecognizerStateBegan:
        {
            // UIImageView *_imageView;
            [_imageView setImage:_graph.imageOfLayer];
            [_imageView setHidden:NO];
            // CGRect initialFrame is frame of graph container
            [_imageView setFrame:initialFrame];
            _savedHeigth = _imageView.frame.size.height;
        }
            break;

        case UIGestureRecognizerStateChanged:
        {
            CGFloat scaledHeight = recognizerScale * _savedHeight;

            CGRect imageFrame = _imageView.frame;
            imageFrame.size.height = scaledHeight;

            [_imageView setFrame:imageFrame];
        }
            break;

        case UIGestureRecognizerStateEnded:
            CGFloat scaledRange = calculateRangeFromHeights(...);

            CPTXYPlotSpace *plotSpace = (CPTXYPlotSpace *)_graph.defaultPlotSpace;

            [plotSpace setYRange:scaledRange];
            [_imageView setHidden:YES];
            break;

        default:
            break;
    }
}

プロット レイヤーの画像を取得し、UIImageView のスケーリングを実行すると、超高速になります。しかし、Y スケールを小さくすると、グラフの一部しか表示されず、上部が切り取られます。

Core Plot グラフをスムーズかつリアルタイムにスケーリングできますか?

4

1 に答える 1

0

Core Plot には、スクロール ビュー内に表示されているグラフの量を知る方法がありません。スクロール ビューを削除し、組み込みの Core Plot スクロールに依存します。それが不可能な場合は、どのバーが表示されているかを判断し、表示されているバーのみを表示できます。表示されているバーのデータのみを返すようにデータソースを変更し、表示されているバーのセットが変更されるたびにデータをリロードします。

于 2012-11-22T13:36:45.720 に答える