2012-03-12 14 views
2

跳ねるボールの周りを回転させるのに問題があります。iPad上の跳ね返るボールの周りのUIViewの回転

これまでのところ、2つのUIViewがViewController内にあります。ビューの1つにはクォーツのボールが描かれたCALayerが含まれています。もう一方のビューには、正方形のフレームのベジェパスが含まれています。ボールはフレームの内側を跳ね返ります。これはすべて正常に動作します。

問題は、ユーザーがパンジェスチャーを使用してフレームを回転できるようにするシステムを実装していることです。実際には、フレームが回転しているときにボールがボールの軌跡を描き始めるときに直線になるべきことを除いて、実際にはうまくいきます。すべての衝突検出は依然として有効で、影響を受けるボールの軌跡のみです。回転が停止すると、すべて正常に動作します。なぜ私は理解できません。

私はフレームを回転させるために、コードのこの部分を使用しています。それを行うための賢い方法

CGFloat translation = 250; 
NSArray *temp = [[outer layer] sublayers]; 
CAShapeLayer *layer = [temp objectAtIndex:0]; 
UIBezierPath *newPath = [UIBezierPath bezierPathWithCGPath:layer.path]; 
[newPath applyTransform:CGAffineTransformMakeTranslation(-translation, -translation)]; 
[newPath applyTransform:CGAffineTransformMakeRotation(DEGREES_TO_RADIANS(rotationCounter))]; 
[newPath applyTransform:CGAffineTransformMakeTranslation(translation, translation)]; 
layer.path = newPath.CGPath; 

おそらくないが、私は本当に私がやっているかわからない正直に言うと!

私が使用してのUIViewを回転させることを試みた:

[UIView animateWithDuration:0.1 animations:^{ 
    frame.transform = CGAffineTransformMakeRotation(DEGREES_TO_RADIANS(rotationCounter)); 
    }]; 

しかし、私は同じprobemを得ました。私はまた、フレームが描かれているCALayerにCATransform3Dを使ってみましたが、同じことが起こりました。

また、60fpsに設定されたステップタイマーによってボールがアニメーションされています。

申し訳ありませんが本当に漠然としていて、助けることができる誰にも感謝します。

乾杯、

ジェームズ

答えて

0

あなただけの親ビュー内のすべてのもの(フレーム・パス、ボールを)置き、その後、そのビューに変換する回転を適用することができるはずです。それは、すべての子ビューの座標系を一緒に回転させ、すべてがあなたが望むように回転するはずです。あなたがしようとしているものよりずっと簡単です。

+0

フレームの回転は、ボールのパスにまったく影響してはなりません。親ビューを回転すると、フレームとボールの両方が影響を受けます。私はこれまでに、両方のCAShaplayersが1つのUIViewのレイヤー内に保持されるように、このコードを変更しました。私はフレームのシェイプレイヤーにCATransformを使用しています。 1つは、フレームをクリアな色に設定して回転させると、ボールに問題は発生しないということです。私は一週間を費やして、OpenGLのすべてのグラフィックスを学習して書き直しても、同じことが起こった! – GCBenson

関連する問題