iOS 中无法缩放核心图

Trouble pinch zooming core plot graph in iOS

我已经使用 Core Plot 创建了一个图表,并且正在尝试使用缩放功能。我希望捏合仅在 x 轴或仅在 y 轴上起作用。我通过在我放入的捏合手势识别器中使用以下代码来完成此操作。

- (void)handlePinch:(UIPinchGestureRecognizer*)recognizer
{
//NSLog(@"We are pinching");
//This allows you to figure out which direction the pinch is occuring HORIZ or VERT

if (recognizer.state != UIGestureRecognizerStateCancelled)  //If gesture is occuring
{
    _startScale = 1.0f;

    if (recognizer.numberOfTouches == 2)  //With two fingers
    {
        CGPoint firstPoint = [recognizer locationOfTouch:0 inView:recognizer.view];
        CGPoint secondPoint = [recognizer locationOfTouch:1 inView:recognizer.view];

        CGFloat tangent = fabs(secondPoint.y - firstPoint.y) / (secondPoint.x - firstPoint.x);

        CGFloat angle = fabs(tangent);
        //NSLog(@"angle is %f", angle);

        if (angle <= 0.2679491924f)
        {
            //NSLog(@"HORIZONTAL");
            _zoomX = _startScale * recognizer.scale;

        }
        else if (angle >= 3.7320508076f)
        {
            //NSLog(@"VERTICAL");
            _zoomY = startScale * recognizer.scale;
        }
        else
        {
            //NSLog(@"BOTH");
        }
    }
}

[self changePlotRange];

}

方法changePlotRange如下

- (void)changePlotRange
{

CPTGraph *graph = _hostView.hostedGraph;
CPTXYPlotSpace *plotSpace = (CPTXYPlotSpace *) graph.defaultPlotSpace;

plotSpace.xRange = [CPTPlotRange plotRangeWithLocation:CPTDecimalFromCGFloat(_Xmin * _zoomX) length:CPTDecimalFromCGFloat((_Xmax - _Xmin) * _zoomX)];

plotSpace.yRange = [CPTPlotRange plotRangeWithLocation:CPTDecimalFromCGFloat(_Ymin * _zoomY) length:CPTDecimalFromCGFloat((_Ymax - _Ymin) * _zoomY)];
}

效果很好,我可以独立地放大和缩小任一轴。但是,当我再次开始捏时,比例会跳回 1,图形会弹回原始比例,因此您需要再次缩放。我希望它像图片一样工作,捏一点,放大一点,再捏一点,图片从最后一个比例缩放。

因此,在捏合手势中,我尝试保持当前比例并 return 稍后使用...

if (recognizer.state == UIGestureRecognizerStateEnded)
{
    _startScale = _zoomX;
}

我把它放在 handlePinch 方法中。但它仍然回到了一个规模。任何帮助将不胜感激,因为我在过去三天里搜索并尝试了很多东西。

您需要分别保存 x 和 y 的结束缩放值,因为它们可能不同。此外,不要在手势识别器处理程序的开头重置起始比例——您希望它使用以前的缩放值。