如何在不实际缩放的情况下更改视图缩放值?

Posted

技术标签:

【中文标题】如何在不实际缩放的情况下更改视图缩放值?【英文标题】:How to Change a Views Scale Value without Actually Scaling it? 【发布时间】:2011-11-03 05:08:36 【问题描述】:

我想知道是否可以在不实际缩放的情况下实际更改 UIViews 缩放值?例如,如何更改这个transform.scale 值:

[[[[myView] layer] valueForKeyPath:@"transform.scale"] floatValue];

我这样做的理由很古怪。我有一个应用程序,我可以在其中导入用户可以在屏幕上拖动和缩放的图像。导入图像后,我最初必须对其进行缩放并将其居中以适合视图。当我缩放它时,它的“transform.scale”值从 1 变为我缩放它的任何值。如果我通过设置框架而不是 CGAffineTransformScale 来进行缩放,则可以解决此问题。但是,我想避免这种情况,只是想以某种方式将比例值重置为 1。

【问题讨论】:

令人困惑...我没听懂你的意思? @Inder Kumar Rathore 在视图上执行 CGAffineTransformScale 时,它​​会更改我上面列出的值,即 valueForKeyPath 之一。因此,如果它最初是 1,并且我将其缩小到一半,则比例将下降到 0.5。我想将比例值重置为 1,因此未来的比例是根据我刚刚执行的比例,而不是原始值。 好吧..让我看看能不能帮你 【参考方案1】:

您无法通过 resetthe scale to 1 once you have scaled it, however you could have aninitialScalevariable and store this initial scale. When the user starts to scale after that, simply apply the scale factor to thisinitialScale` 来获取实际比例。

例如,您最初缩放图像以适应它的缩放比例为 0.8,将 initialScale 设置为 0.8。

例如,当用户开始将图像从 1 缩小到 0.5 时,将此更改应用于您的初始比例,因此用户缩放到 0.5,将初始比例乘以等于 0.4。

【讨论】:

是的,这就是我现在正在做的事情,只是在寻找一种可以避免使用类变量的方法。【参考方案2】:

您始终可以使用 UIView contentScaleFactor 属性。与视图的变换一样,contentScaleFactor 会更改视图相对于其他视图的显示大小,并且不会影响其用户坐标大小(即位置、边界、框架)。不同的是 contentScaleFactor 会改变视图后备存储位图的实际大小,而变换缩放不会。

【讨论】:

以上是关于如何在不实际缩放的情况下更改视图缩放值?的主要内容,如果未能解决你的问题,请参考以下文章

如何在不缩放图像子视图的情况下缩放图像?迅速的ios

如何在不更改用户设置的缩放比例的情况下更新地图标记?

如何在不使用 UIImageView 的情况下捏缩放 UIImage?

如何在不缩放其内容的情况下调整 opengl 视口大小

在不移动叠加视图的情况下裁剪和缩放图像,而是在 ImageView 中移动图像

如何在不缩放场景的情况下与 QGraphicsView 左侧的矩形对齐?