2011-11-03 104 views
0

我想知道是否有可能实际改变一个UIViews的比例值而不实际缩放它?举例来说,你怎么改变这个transform.scale值:如何更改视图比例值而不实际缩放比例?

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

我这样做的理由是相当ocdish。我有一个应用程序,用于导入用户可以在屏幕上拖动和缩放的图像。当图像被导入时,我最初必须缩放它并居中以适合视图。当我缩放它时,它的“transform.scale”值从1变为任何我缩放的值。如果我通过设置框架而不是做CGAffineTransformScale来缩放比例,那么有一个解决方法。但是,我想避免这种情况,只是简单地将比例值重置为1。

+0

令人困惑...我没有得到你吗? –

+0

@Inder Kumar Rathore当您对视图执行CGAffineTransformScale时,它会更改上面列出的值,即valueForKeyPath之一。因此,如果它最初为1,并且我最小化为它的一半大小,那么该比例将下降到0.5。我想将比例值重置为1,所以未来的比例尺就我刚刚执行的比例而言,而不是原始值。 –

+0

好吧..我看看我能不能帮你 –

回答

3

您不能重置the scale to 1 once you have scaled it, however you could have an initialScale variable and store this initial scale. When the user starts to scale after that, simply apply the scale factor to this initialScale`来获得实际的比例。

因此,例如,您最初缩放图像以适合它,并且它的缩放比例为0.8,将initialScale设置为0.8。

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

+0

是的,这是我现在正在做的,只是寻找一种方法,我可以避免使用类变量。 –

+0

Downvote!?!不错。 –

0

您可以随时使用UIView contentScaleFactor属性。与视图的变换类似,contentScaleFactor将视图的显示大小相对于其他视图进行更改,并且不影响其用户坐标大小(即位置,边界,框架)。不同之处在于contentScaleFactor更改了视图后备存储位图的实际大小,其中变换缩放并非如此。