2011-08-02 66 views
2

我有一圈繞我的視圖中心的軌道。它不斷旋轉360度。這用我下面的代碼工作正常:軌道旋轉和UIImageView的轉換

-(void) rotateGear: (UIImageView*) view angle:(int)angle arc:(float)arc 
{ 
    float x1 = view.frame.origin.x + view.frame.size.width/2; 
    float y1 = view.frame.origin.y + view.frame.size.height/2; 
    float radius = sqrtf(powf(160.0f - x1 ,2.0f) + powf(240.0f - y1, 2.0f)); 

    float x = 160.0f + radius * (cos(arc + M_PI + (angle * (M_PI/180.0f)))); 
    float y = 240.0f + radius * (sin(arc + M_PI + (angle * (M_PI/180.0f)))); 

    view.frame = CGRectMake(x - view.frame.size.width/2, y - view.frame.size.height/2, view.image.size.width, view.image.size.height); 
} 

上面的代碼基於在參數傳遞新的位置和圖像移動到新的位置,使它看起來好像它是在完美的關係移動到中心的主要觀點。一切都很完美。

但是,我想讓圍繞中心軌道運行的視圖/軌道在旋轉時也旋轉。在另一個計時器中,我嘗試了:

littleGear.transform = 
     CGAffineTransformRotate(CGAffineTransformIdentity, M_PI * (angle)/180.0); 

事情變得瘋狂。球體開始在屏幕上翻轉,翻轉,摺疊和彎曲。如果我刪除第一個代碼,軌道旋轉,它工作正常 - 它旋轉完美的地方。

從本質上講,它們都能正常工作,直到合併,然後一切都變得瘋狂。我的第一個猜測是矩陣在所有旋轉中都變得清晰起來,但我不知道如何解決它。有任何想法嗎?

回答

1

幀不是存儲的屬性的UIView,它是從其他參數的數量計算的 - 查看中心,邊界,當前變換,所以如果你設置非平凡變換到你的視圖,你不再可以直接設置它的框架。

在你的情況下,旋轉齒輪基本上只是改變其位置可以設置齒輪的中心,而不是框架的 - 這樣所有視圖屬性應保持一致的狀態:

-(void) rotateGear: (UIImageView*) view angle:(int)angle arc:(float)arc 
{ 
    ...  
    view.center = CGPointMake(x, y); 
} 

附:如果你想改變視圖的大小 - 改變它的bounds屬性而不是frame

+0

你釘了它!謝謝! –

0

我想這件事情會改善,如果你也做了軌道旋轉通過轉換。

什麼你在這種情況下,尋找的是一個平移變換:

CGAffineTransform CGAffineTransformMakeTranslation (
    CGFloat tx, 
    CGFloat ty 
); 

,你可以使用,而不是CGAffineTransformIdentity設置littleGear.transform時:

translationTransform = CGAffineTransformMakeTranslation(x, y); 
littleGear.transform = CGAffineTransformRotate(translationTransform, M_PI * (angle)/180.0);