UIView的。 如何限制扩展到一个尺寸只有(UIView. How do I constrai

2019-07-18 00:43发布

我的UIScrollView的UIView的包含的一个实例的实例。 UIView的只是为的UIImageView实例的卧式阵列的容器。 - 缩放是的UIScrollView和UIScrollViewDelegate提供。 我想限制放大到只沿着没有垂直scalling在所有水平轴发生。 如何我做到这一点?

有没有一种方法,例如,子类的UIView并重写适当的方法,以防止垂直缩放? 我喜欢这种方法,但我就重写该方法和什么重写的方法应该真正做到不清楚。

欢呼声,道格

Answer 1:

类似于我在形容这个答案 ,你可以创建一个UIView子类并覆盖-setTransform:访问的方法来调整变换的的UIScrollView将尝试应用到你的UIView。 设置此UIView的托管您的内容子视图,使之成为的UIScrollView的子视图。

在您的重写-setTransform :,则需要采取在变换了的UIScrollView想申请和调整,使缩放只需要在一个方向上的影响。 从上CGAffineTransform矩阵是如何构造的文件 ,我相信下面的实现应该限制你的缩放只是沿水平方向:

- (void)setTransform:(CGAffineTransform)newValue;
{
 CGAffineTransform constrainedTransform = CGAffineTransformIdentity;
 constrainedTransform.a = newValue.a;
 [super setTransform:constrainedTransform];
}


Answer 2:

使用OS 3.0,你可以告诉变焦可放大到了滚动一个矩形。 我有这个在我的逻辑检测水龙头。

CGRect zoomRect = [self zoomRectForScale:newScale withCenter:CGPointMake(tapPoint.x, tapPoint.y) inScrollView:scrollView];
[scrollView zoomToRect:zoomRect animated:YES];

该用于其他部分,你将不得不通过舒展的新框架具有与原始比例图像的意见,并在同一个中心点居中。 为此,您可以在动画定时一样的缩放动画,使它看起来正确的,但我认为这将是做到这一点的唯一途径。



Answer 3:

scrollViewDidZoom:基于zoomScale调整内容视图的变量,重置zoomScale到1.0,然后做setNeedsDisplay上的内容视图。 在你的内容视图的drawRect处理实际的变焦(在任何方向你想要的)。

丑陋的详细信息:

  1. 当变焦过程中,该UIScollView改变contentOffsetcontentScale,所以保存scrollViewWillBeginZooming那些先前值scrollViewDidZoom:这样你就可以计算出自己新的contentOffset根据变焦。

  2. 由于改变zoomScale将立即触发另一scrollViewDidZoom:,你必须设置复位zoomScale前BOOL(和明确后)。 测试在scrollViewDidZoom开始时BOOL:如果真的回归。

  3. 您可能需要抑制scrollViewDidScroll:当变焦过程中(测试BOOL;设置在scrollViewWillBeginZooming:和清除它在scrollViewDidEndZooming:),所以你自己contentOffsets使用,而变焦正在进行中。



文章来源: UIView. How do I constrain scaling to one dimension only