核心图范围变化性能



我需要使用捏合识别器调整我的绘图大小,它允许在左侧和底部的小区域中分别调整"宽度"和"高度"的大小。此外,我的情节在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 刻度时,我只有图形的一部分,它在顶部被切割。

是否可以平滑实时地缩放核心图?

核心图无法知道在滚动视图中可以看到多少图表。我会删除滚动视图并依靠内置的核心图滚动。如果这不可行,您可以确定哪些条形是可见的,并且只显示可见的条形。修改数据源以仅返回可见条形的数据,并在可见条形集更改时重新加载数据。

最新更新