2011-08-02 18 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

フレームが格納されているプロパティではありませんビューセンター、境界、現在の変換などの他のパラメータの数から計算されます。したがって、非自明の変換をビューに設定すると、そのフレームを直接設定することはできなくなります。

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

P.S.:すべてのビューのプロパティは一貫した状態のままにする必要があり、そのよう - ギアを回転させるなど、あなたの場合は

は基本的にはちょうどあなたが、フレームの代わりにギアの中心部を設定することができ、その位置を変えていますビューのサイズを変更したい場合は frameの代わりに boundsプロパティを変更してください

+0

あなたはそれを釘付けにしました!ありがとうございました! –

0

私は軌道回転を変換によっても行いたいと思っています。

あなたは、この場合には探していると、翻訳変換である:あなたがlittleGear.transform代わりCGAffineTransformIdentityの使用設定することができます

CGAffineTransform CGAffineTransformMakeTranslation (
    CGFloat tx, 
    CGFloat ty 
); 

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