1

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

问题是捏的位置被忽略了——所以它总是显示捏在屏幕的左侧。

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

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

4

1 回答 1

2

我正在缩放图形,因此缩放调整了图形视图上的宽度约束。

这是捏处理程序:

- (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;
}
于 2015-08-06T13:08:35.413 回答