масштабирование основного сюжета - жест щипком

У меня проблема с жестом сжатия для масштабирования, основная проблема заключается в том, что при масштабировании я масштабирую центр изображения, поэтому, если я зажимаю верхний правый или нижний угол, масштабирование всегда находится в центре изображения. Это мой код, как я могу отредактировать его, чтобы увеличить масштаб в середине касания?

- (void)handlePinchGesture:(UIPinchGestureRecognizer *)gestureRecognizer{

if (gestureRecognizer.state == UIGestureRecognizerStateBegan) {

    scala = [gestureRecognizer scale];
    nextScala = [gestureRecognizer scale];

    //NSLog(@"Scala: %f Gesture Scala %f",scala,[gestureRecognizer scale]);
}
else if (gestureRecognizer.state == UIGestureRecognizerStateChanged) {


    //CGPoint pointUno = [gestureRecognizer locationOfTouch:0 inView:[gestureRecognizer view]];
    //CGPoint pointDue = [gestureRecognizer locationOfTouch:1 inView:[gestureRecognizer view]];

    CGPoint point = [gestureRecognizer locationInView:[gestureRecognizer view]];



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

    double minX = plotSpace.xRange.minLimitDouble;
    double maxX = plotSpace.xRange.maxLimitDouble;
    double minY = plotSpace.yRange.minLimitDouble;
    double maxY = plotSpace.yRange.maxLimitDouble;

    //NSLog(@"Scala: %f Gesture Scala %f Velocity: %f",scala,[gestureRecognizer scale],[gestureRecognizer velocity]);
    double lenghtX = maxX - minX;
    double lenghtY = maxY - minY;

    float stepScale = lenghtX/25;

    if ([gestureRecognizer scale] < nextScala) {
        minX = plotSpace.xRange.minLimitDouble - stepScale;
        maxX = plotSpace.xRange.maxLimitDouble + stepScale;
        minY = plotSpace.yRange.minLimitDouble - stepScale;
        maxY = plotSpace.yRange.maxLimitDouble + stepScale;
    }
    else {
        minX = plotSpace.xRange.minLimitDouble + stepScale;
        maxX = plotSpace.xRange.maxLimitDouble - stepScale;
        minY = plotSpace.yRange.minLimitDouble + stepScale;
        maxY = plotSpace.yRange.maxLimitDouble - stepScale;
    }

    lenghtX = maxX - minX;
    lenghtY = maxY - minY;

    NSLog(@"Old X: %f Y: %f",point.x,point.y);
    NSLog(@"New X: %f Y: %f",lenghtX-point.x,lenghtY-point.y);

    if (lenghtX > 0.05 && lenghtX < 4500) {
        plotSpace.xRange = [CPTPlotRange plotRangeWithLocation:CPTDecimalFromDouble(minX) length:CPTDecimalFromFloat(lenghtX)];
        plotSpace.yRange = [CPTPlotRange plotRangeWithLocation:CPTDecimalFromDouble(minY) length:CPTDecimalFromFloat(lenghtY)];
        nextScala = [gestureRecognizer scale];
    }
}
else if (gestureRecognizer.state == UIGestureRecognizerStateEnded) {

    [self performSelectorInBackground:@selector(getValues) withObject:nil];

// [собственно получить значения]; } }


person francesco.venica    schedule 30.04.2013    source источник


Ответы (1)


Используйте этот метод пространства графика для масштабирования:

-(void)scaleBy:(CGFloat)interactionScale aboutPoint:(CGPoint)interactionPoint;
person Eric Skroch    schedule 01.05.2013
comment
Мне нужно изменить значение массива, и сделать это в этом месте, используя много памяти, мне нужно изменить значение, когда удар закончен. Я обнаружил жест щипка hostingview, теперь, кажется, работает - person francesco.venica; 01.05.2013