UIView的.如何仅将缩放约束到一个维度

dug*_*gla 4 iphone uiscrollview uiview

我有一个包含UIView实例的UIScrollview实例.UIView只是UIImageView实例的水平数组的容器. - UIScrollView和UIScrollViewDelegate提供了缩放功能.我想限制缩放仅沿水平轴发生,根本没有垂直的褶皱.我该怎么做?

有没有办法,例如,子类UIView并覆盖适当的方法来防止垂直缩放?我喜欢这种方法,但我不清楚要覆盖哪种方法以及实际应该覆盖的方法.

干杯,道格

Bra*_*son 15

与我在本回答中描述的类似,您可以创建一个UIView子类并覆盖-setTransform:accessor方法来调整UIScrollView将尝试应用于您的UIView的转换.将此UIView设置为托管您的内容子视图,并使其成为UIScrollView的子视图.

在覆盖的-setTransform:中,您需要接受UIScrollView要应用的变换并进行调整,以便缩放仅在一个方向上生效.从关于如何构造CGAffineTransform矩阵文档中,我相信以下实现应该将缩放限制为仅沿水平方向:

- (void)setTransform:(CGAffineTransform)newValue;
{
 CGAffineTransform constrainedTransform = CGAffineTransformIdentity;
 constrainedTransform.a = newValue.a;
 [super setTransform:constrainedTransform];
}
Run Code Online (Sandbox Code Playgroud)

  • 这限制了 Y 轴,但 UIScrollView 的行为 - 在捏合期间 - 就好像两者都被变换了。也就是说,内容偏移和内容大小都会增加,以适应两个轴上的缩放。对我可能会错过什么有什么想法吗? (2认同)