Swift/Math - 缩放时保持原点

Posted

技术标签:

【中文标题】Swift/Math - 缩放时保持原点【英文标题】:Swift/Math - Maintain origin when scaling 【发布时间】:2016-08-26 21:42:37 【问题描述】:

我有一个 contentSize 为 (1300,800) 和 zoomScale 为 1.0 的滚动视图,并且我有一个 UIView 添加到该滚动视图中,原点 X: 600 Y: 400 UIView 位于 UIImageView 之上。

现在假设我缩小并且 zoomScale 现在是 0.9。我已将 UIView 放置在 X: 600 和 Y: 400 处,因为当图像处于其原始大小时,它位于图像中一个特殊位置的顶部,但是当我缩小图像时,图像会被缩放,现在 X: 600 和 Y : 400 不是 UIView 应该放置的位置。它应该跟随图像的大小调整。

正如您在下面看到的,盒子位于我放置的位置。只要我不更改图像的大小,这就会起作用,但是当我放大 UIScrollView 时,图像正在被缩放,并且原点 X 和 Y 不再适合。

如何保持 X 位置和 Y 位置?因此,当我缩放图像时,框会更改它的 X 位置和 Y 位置,以便始终坐在同一位置。

【问题讨论】:

如果我没记错的话,这应该就像将红色框的 x/y 和宽度/高度乘以比例因子一样简单。 我试过这个:var frame = airport.frame frame.origin.x = airport.frame.origin.x * mapView.zoomScale frame.origin.y = airport.frame.origin.y * mapView .zoomScale airport.frame = frame 但是没用。 它根本没有改变,还是以一种不期望/不期望的方式改变? 它只是跑到一边并离开了屏幕。 【参考方案1】:

UIView 位于 UIImageView 之上

“坐在上面”是不够的。使红色视图(UIView)成为地图视图(UIImageView)的子视图

滚动视图通过对地图视图应用比例变换来缩放地图视图,并且该比例变换也将应用于地图视图的子视图。

【讨论】:

是的,这可以作为一种解决方案,但是如果我想将相同的比例应用于视图而不将其添加到 UIImageView 中。 然后假装它是一个子视图。严重地。想想我刚才说的话。我们刚刚学到了什么?我们了解到,如果它一个子视图,它的大小和位置不会改变。因此,只需继续为地图的同一矩形调用convertRect:fromView,以找出该同一矩形现在在其他坐标集中的位置。

以上是关于Swift/Math - 缩放时保持原点的主要内容,如果未能解决你的问题,请参考以下文章

UIViews 重叠,即使设置原点和大小以保持它们分开

pyqtgraph:在缩放时保持 TextItem 的恒定位置

iText image.setRotationDegrees()不保持一致的原点

谷歌地图 - 缩放时保持中心

谷歌地图 - 缩放时保持中心

保持 tkinter 画布原点居中