2010-12-14 53 views
12

我正在創建一個iPad應用程序,並希望用當前視圖大小更新用戶。我曾經通過計算CGAffineTransform的尺度並將xScale乘以寬度(相關視圖的寬度)和yScale的高度來做到這一點。我想繼續這樣做,但我不再做2d轉換,我確定用什麼等式從CATransform3D中提取比例尺信息。從CATransform3D獲取'比例'

你能幫忙嗎?

回答

19

爲了得到層的目前的規模,你就在層上執行valueForKeyPath:

CGFloat currentScale = [[layer valueForKeyPath: @"transform.scale"] floatValue]; 

其它鍵可以在Apples Core Animation Programming Guide

+0

找到這個工作太棒了!應該是批准的答案。 – Collin 2012-09-13 22:55:51

+0

非常有用:) Tks很多! – TonyMkenu 2013-06-17 10:40:49

+0

有趣的是,總是返回nil [[self presentationLayer] valueForKey:@「transform.scale」] – Andy 2013-11-01 12:30:17

8

我對API不熟悉,但CATransform3D看起來像是一個常規的4x4轉換矩陣,用於執行3D轉換。

假設它不過是一個縮放,旋轉和平移的組合,可以通過計算左上3x3的行或列的大小來提取比例因子,具體取決於CATransform3D是行或列主要分別。

例如,如果它是行大,x方向的比例尺是(m11 * m11)+(m12 * m12)+(m13 * m13)的平方根。 y和z尺度同樣是第二和第三排的尺度。

CATransform3DMakeTranslation的文檔看來,CATransform3D確實是行重點。