我使用UIPinchGestureRecognizer
来调整UIScrollView
中视图的宽度(而不是高度)。它适用于捏合手势的scale
属性,但滚动视图的contentOffset
不会改变,因此视图总是在右侧增加。如果我将contentOffset
与宽度一起缩放,这看起来会好一点,因为从那时起,视图从屏幕的最左侧增加。
问题是夹点的位置被忽略 - 因此总是会出现夹点位于屏幕左侧。
我需要以某种方式将夹点的位置考虑到contentOffset
调整,以便可以调整偏移以使夹点处的内容保持在同一位置。
注意:我不能使用内置的UIScrollView
捏拉缩放手势,因为我只希望缩放为一维,水平。另外,我无法在UIView
上使用转换,因为我需要使用UIScrollView
。
答案 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;
}