2011-06-21 30 views
1

我有一個自定義的UIImageView,我可以做一個翻譯與拖動屏幕周圍(xDif和yDif是量的手指移動):平移視圖和旋轉它的問題

CGAffineTransform translate = CGAffineTransformMakeTranslation(xDif, yDif); 
[self setTransform: CGAffineTransformConcat([self transform], translate)]; 

比方說,我感動ImageView在x和y方向上均爲50px。然後我嘗試使用旋轉ImageView的(通過手勢識別):

CGAffineTransform transform = CGAffineTransformMakeRotation([recognizer rotation]); 
myImageView.transform = transform; 

會發生什麼事是ImageView的突然移動到了ImageView的最初位於(翻譯之前 - 在兩個方向上移動位置+ 50像素不)。 (看來,無論我如何翻譯視圖,ImageView子類的self.center保持不變 - 它最初放置在IB中)。

另一個問題是,如果我將ImageView旋轉30度,然後再嘗試旋轉一下,它會再次從原始位置(角度= 0)開始並從那裏開始,爲什麼不呢?從30度角開始,而不是0.

回答

2

您正在覆蓋早期的變換。要添加到當前變換,你應該這樣做 -

myImageView.transform = CGAffineTransformRotate(myImageView.transform, recognizer.rotation); 

既然你在一個串行順序改變transform屬性,你應該使用CGAffineTransformRotateCGAffineTransformTranslateCGAffineTransformScale代替你添加到原來的變換和不創建一個新的。

+0

至於「中心」部分,它不會改變,另外需要注意的是,當改變'transform'屬性時'frame'將變得不可靠。 –

+0

爲什麼中心不會改變,當視圖不是在翻譯後的開始位置時... – Ladislav

+0

哦,所以他們所做的就是讓所有初始數據像中心一樣始終保持不變,並始終將它們轉換爲一個變換矩陣來獲得新的位置... – Ladislav