麻烦在iOS

时间:2015-12-06 14:59:24

标签: ios core-plot uipinchgesturerecognizer

我已经使用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并且图形会反弹回原始比例,因此您需要再次缩放。我想让它像照片一样工作,捏一点,缩放一点,捏一些,图片从最后一个刻度缩放。

因此,在捏合手势中,我试图保持当前比例并稍后将其返回...

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

我把它放在handlePinch方法中。但它仍然可以追溯到一个规模。任何帮助都会受到赞赏,因为我在过去三天里搜索并尝试过很多东西。

1 个答案:

答案 0 :(得分:1)

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