2011-11-03 105 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更改了視圖後備存儲位圖的實際大小,其中變換縮放並非如此。