我正在創建一個iPad應用程序,並希望用當前視圖大小更新用戶。我曾經通過計算CGAffineTransform的尺度並將xScale乘以寬度(相關視圖的寬度)和yScale的高度來做到這一點。我想繼續這樣做,但我不再做2d轉換,我確定用什麼等式從CATransform3D中提取比例尺信息。從CATransform3D獲取'比例'
你能幫忙嗎?
我正在創建一個iPad應用程序,並希望用當前視圖大小更新用戶。我曾經通過計算CGAffineTransform的尺度並將xScale乘以寬度(相關視圖的寬度)和yScale的高度來做到這一點。我想繼續這樣做,但我不再做2d轉換,我確定用什麼等式從CATransform3D中提取比例尺信息。從CATransform3D獲取'比例'
你能幫忙嗎?
爲了得到層的目前的規模,你就在層上執行valueForKeyPath:
:
CGFloat currentScale = [[layer valueForKeyPath: @"transform.scale"] floatValue];
我對API不熟悉,但CATransform3D
看起來像是一個常規的4x4轉換矩陣,用於執行3D轉換。
假設它不過是一個縮放,旋轉和平移的組合,可以通過計算左上3x3的行或列的大小來提取比例因子,具體取決於CATransform3D
是行或列主要分別。
例如,如果它是行大,x方向的比例尺是(m11 * m11)+(m12 * m12)+(m13 * m13)的平方根。 y和z尺度同樣是第二和第三排的尺度。
從CATransform3DMakeTranslation
的文檔看來,CATransform3D
確實是行重點。
找到這個工作太棒了!應該是批准的答案。 – Collin 2012-09-13 22:55:51
非常有用:) Tks很多! – TonyMkenu 2013-06-17 10:40:49
有趣的是,總是返回nil [[self presentationLayer] valueForKey:@「transform.scale」] – Andy 2013-11-01 12:30:17