CGAffineTransform scale 在 iOS10 上移动视图中心(在 iOS11 上不移动)

CGAffineTransform scale moves center of view on iOS10 (and doesn't on iOS11)

我有一个应用程序同时支持 iOS10 和 iOS11。在应用程序中,我通过平移手势将 uiview 固定在手指上。平移手势仅沿 y 轴移动视图中心(x 始终保持不变)。我也有 CGAffineTransform 绑定到手势,用户移动得越多,我的视图就越大。 "Panned" 视图包含具有某些内容的另一个视图。

现在 iOS11 我有这个行为(我认为这是正确的):

             > - center of content view stays on a vertical line
^  <--[      |      ]-->
|  <----[    |    ]---->
|  <------[  |  ]------>
|  <--------[ ]-------->

但是在 iOS10 我得到了这个行为:

                > - center of content view moves to the right along with scale growth 
^  <----[      /      ]>
|  <-----[    /    ]--->
|  <------[  /  ]------>
|  <--------[ ]-------->

我将内容视图添加到平移视图的代码:

// self is PannedView 
self.addSubview(contentView)
contentView.translatesAutoresizingMaskIntoConstraints = false
// add constraints:
// self.width = contentView.width
// self.height = contentView.height
// self.centerX = contentView.centerX
// self.centerY = contentView.centerY

处理平移手势:

... // handle some unrelated stuff
panView.center.y = self.panStartPoint.y + panDeltaY // where panDeltaY is basically a translation of a UIPanGestureRecognizer
... // some scale calculation logic, calc scale addition depending on pan touch location
let scale = 1 + movePercent * 0.1 // where movePercent is between 0 and 1
panView.transform = CGAffineTransform.identity.scaledBy(x: scale, y: scale)

如您所见,我也将比例限制在 11.1 之间。

似乎约束与缩放在 iOS10 和 iOS11 上的工作方式不同,或者缩放 "double" 以某种方式传播到子视图。

有什么想法吗?

不要将变换应​​用于由约束定位的视图。结果是不确定的(这正是您所经历的:它 "means" 在一个系统上是一回事,在另一个系统上是另一回事)。