启用 UIScrollView 的缩放重置缩放视图转换

Posted

技术标签:

【中文标题】启用 UIScrollView 的缩放重置缩放视图转换【英文标题】:Enable zoom of UIScrollView reset zoomed view transformation 【发布时间】:2013-03-11 17:33:25 【问题描述】:

首先,我想澄清一下,似乎有很多关于这个主题的问题没有回应。得到这个答案的人应该很少见。

我将UIImageView 设置为UIScrollView 子类中的缩放视图。

- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView

    return self.imageView;

在创建self.imageView 之后,我对其应用了 CGAffineTransform,它的矩阵从:

(CGAffineTransform) $0 = 
  (CGFloat) a = 1
  (CGFloat) b = 0
  (CGFloat) c = 0
  (CGFloat) d = 1
  (CGFloat) tx = 0
  (CGFloat) ty = 0

(CGAffineTransform) $2 = 
  (CGFloat) a = 0
  (CGFloat) b = 1
  (CGFloat) c = -1
  (CGFloat) d = 0
  (CGFloat) tx = 0
  (CGFloat) ty = 0

在多次调用- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView 委托方法后,self.imageView 的变换矩阵由:

(CGAffineTransform) $6 = 
  (CGFloat) a = 0
  (CGFloat) b = 1
  (CGFloat) c = -1
  (CGFloat) d = 0
  (CGFloat) tx = 0
  (CGFloat) ty = 0

(CGAffineTransform) $7 = 
  (CGFloat) a = 0.130719
  (CGFloat) b = 0
  (CGFloat) c = 0
  (CGFloat) d = 0.130719
  (CGFloat) tx = 0
  (CGFloat) ty = 0

如您所见,0.130 是我的缩放比例,但我的旋转变换消失了。 我正在寻找一种方法来保持 self.imageView 上的旋转。

非常感谢您的帮助。

【问题讨论】:

【参考方案1】:

这可能听起来有点 Hack'ish,但我会尝试将 imageView 嵌入 UIView 中,该 UIView 将由 viewForZoomingInScrollView 调用返回。

这样,imageView 将保留它的旋转变换,而它的 superview 将被放大或缩小。

我倾向于避免对 UIKit 内部的功能做出假设

【讨论】:

以上是关于启用 UIScrollView 的缩放重置缩放视图转换的主要内容,如果未能解决你的问题,请参考以下文章

contentOffset 在 UIScrollView 缩放结束时重置

启用分页的 UISCrollview

UIscrollView 快速分页和缩放图像

iphone:UIScrollView 分页启用,无缩放和无预览

iPhone iOS如何在启用缩放时使UIScrollView与UIRotationGestureRecognizer一起工作?

正确缩放包含许多子视图的 UIScrollView