我的UIScrollView的UIView的包含的一个实例的实例。 UIView的只是为的UIImageView实例的卧式阵列的容器。 - 缩放是的UIScrollView和UIScrollViewDelegate提供。 我想限制放大到只沿着没有垂直scalling在所有水平轴发生。 如何我做到这一点?
有没有一种方法,例如,子类的UIView并重写适当的方法,以防止垂直缩放? 我喜欢这种方法,但我就重写该方法和什么重写的方法应该真正做到不清楚。
欢呼声,道格
我的UIScrollView的UIView的包含的一个实例的实例。 UIView的只是为的UIImageView实例的卧式阵列的容器。 - 缩放是的UIScrollView和UIScrollViewDelegate提供。 我想限制放大到只沿着没有垂直scalling在所有水平轴发生。 如何我做到这一点?
有没有一种方法,例如,子类的UIView并重写适当的方法,以防止垂直缩放? 我喜欢这种方法,但我就重写该方法和什么重写的方法应该真正做到不清楚。
欢呼声,道格
类似于我在形容这个答案 ,你可以创建一个UIView子类并覆盖-setTransform:访问的方法来调整变换的的UIScrollView将尝试应用到你的UIView。 设置此UIView的托管您的内容子视图,使之成为的UIScrollView的子视图。
在您的重写-setTransform :,则需要采取在变换了的UIScrollView想申请和调整,使缩放只需要在一个方向上的影响。 从上CGAffineTransform矩阵是如何构造的文件 ,我相信下面的实现应该限制你的缩放只是沿水平方向:
- (void)setTransform:(CGAffineTransform)newValue;
{
CGAffineTransform constrainedTransform = CGAffineTransformIdentity;
constrainedTransform.a = newValue.a;
[super setTransform:constrainedTransform];
}
使用OS 3.0,你可以告诉变焦可放大到了滚动一个矩形。 我有这个在我的逻辑检测水龙头。
CGRect zoomRect = [self zoomRectForScale:newScale withCenter:CGPointMake(tapPoint.x, tapPoint.y) inScrollView:scrollView];
[scrollView zoomToRect:zoomRect animated:YES];
该用于其他部分,你将不得不通过舒展的新框架具有与原始比例图像的意见,并在同一个中心点居中。 为此,您可以在动画定时一样的缩放动画,使它看起来正确的,但我认为这将是做到这一点的唯一途径。
在scrollViewDidZoom:基于zoomScale调整内容视图的变量,重置zoomScale到1.0,然后做setNeedsDisplay上的内容视图。 在你的内容视图的drawRect处理实际的变焦(在任何方向你想要的)。
丑陋的详细信息:
当变焦过程中,该UIScollView改变contentOffset和contentScale,所以保存scrollViewWillBeginZooming那些先前值:和scrollViewDidZoom:这样你就可以计算出自己新的contentOffset根据变焦。
由于改变zoomScale将立即触发另一scrollViewDidZoom:,你必须设置复位zoomScale前BOOL(和明确后)。 测试在scrollViewDidZoom开始时BOOL:如果真的回归。
您可能需要抑制scrollViewDidScroll:当变焦过程中(测试BOOL;设置在scrollViewWillBeginZooming:和清除它在scrollViewDidEndZooming:),所以你自己contentOffsets使用,而变焦正在进行中。