UIScrollView中仅水平缩放缩放

时间:2014-07-02 02:04:41

标签: ios uiscrollview uipinchgesturerecognizer contentoffset

我使用UIPinchGestureRecognizer来调整UIScrollView中视图的宽度(而不是高度)。它适用于捏合手势的scale属性,但滚动视图的contentOffset不会改变,因此视图总是在右侧增加。如果我将contentOffset与宽度一起缩放,这看起来会好一点,因为从那时起,视图从屏幕的最左侧增加。

问题是夹点的位置被忽略 - 因此总是会出现夹点位于屏幕左侧。

我需要以某种方式将夹点的位置考虑到contentOffset调整,以便可以调整偏移以使夹点处的内容保持在同一位置。

注意:我不能使用内置的UIScrollView捏拉缩放手势,因为我只希望缩放为一维,水平。另外,我无法在UIView上使用转换,因为我需要使用UIScrollView

1 个答案:

答案 0 :(得分:1)

我捏了一下图形,所以捏合调整图表视图上的宽度约束。

这是pinch处理程序:

- (void) doPinch:(UIPinchGestureRecognizer*)pinch;
{        
    CGFloat width = self.graphWidthConstraint.constant;
    CGFloat idealWidth = 1500;
    CGFloat currentScale = width / idealWidth;
    CGFloat scale = currentScale - (1.0 - pinch.scale);

    CGFloat minScale = 0.5;
    CGFloat maxScale = 3.0;
    scale = MIN(scale, maxScale);
    scale = MAX(scale, minScale);

    CGPoint locationScrollview = [pinch locationInView:self.graphScrollView];
    CGFloat pinchXNormalized = locationScrollview.x / width;

    CGPoint locationView = [pinch locationInView:self.view];

    // resize
    CGFloat newWidth = idealWidth * scale;
    self.graphWidthConstraint.constant = newWidth;

    // set offset to position point under touch
    CGFloat pinchXScaled = newWidth * pinchXNormalized;
    CGFloat x = pinchXScaled - locationView.x;
    self.graphScrollView.contentOffset = CGPointMake(x, 0);

    pinch.scale = 1;
}