2008-10-14 152 views
3

如何在任意點周圍使用Core Animation旋轉圖層? (在我的情況下,一個點不在我想要旋轉的圖層內)在任意點周圍旋轉圖層的核心動畫

我更喜歡在不更改錨點的情況下執行此操作,因爲除非我每次更改錨點時都會出錯,否則它會更改圖層。

我想類似的東西,但它沒有工作:

[UIImageView beginAnimations:nil context:nil]; 
CATransform3D rotationTransform = CATransform3DIdentity; 
rotationTransform = CATransform3DTranslate(rotationTransform, 0.0, -100.0, 0.0); 
rotationTransform = CATransform3DRotate(rotationTransform, DegreesToRadians(180), 
         0.0, 0.0, 1.0); 
rotationTransform = CATransform3DTranslate(rotationTransform, 0.0, 100.0, 0.0) 
shape1.layer.transform = rotationTransform; 
[UIImageView commitAnimations]; 

它看起來像旋轉軸的旋轉過程中移動。

回答

0

我最終創建了一個新的更大的圖層,它的中心位於我的旋轉軸處,並將我想要旋轉的圖層設置爲子圖層。

然後轉動更大的層,而不是子層

+0

雖然這可能適用於您的特定情況,但它不是一個通用的解決方案,因爲如果所需的旋轉推動容器 - 層超出層大小限制。 錨點真的是你需要的,在這裏。 – Olie 2010-03-15 21:07:45

2

您可以通過附加多個轉換做到這一點:

  1. 通過翻譯(-rotCenterX,rotCenterY)層
  2. 旋轉層
  3. 由(rotCenterX,rotCenterY)翻譯層
3

您的解決方案是好的,但「預期的方式」是使用錨點。

當您設置定位點時,它正在四處移動,因爲位置已附加到定位點,即設置定位點集合,其中anchorPoint位於超層的座標系統中。

可能不值得改變,因爲你有一些工作,但只是爲了下一次添加到灰色的問題。

祝你好運!

1

您的初始解決方案不好,因爲翻譯動畫就像旋轉一樣。所以你的旋轉的「自定義中心」在旋轉過程中正在移動。你真正想要的是沒有動畫的翻譯和基於非動畫翻譯的動畫旋轉。 事情是,我目前有完全相同的問題,並不能提出解決方案。我現在正在查看CATransaction,希望這可能是關鍵...