跳ねるボールの周りを回転させるのに問題があります。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に設定されたステップタイマーによってボールがアニメーションされています。
申し訳ありませんが本当に漠然としていて、助けることができる誰にも感謝します。
乾杯、
ジェームズ
フレームの回転は、ボールのパスにまったく影響してはなりません。親ビューを回転すると、フレームとボールの両方が影響を受けます。私はこれまでに、両方のCAShaplayersが1つのUIViewのレイヤー内に保持されるように、このコードを変更しました。私はフレームのシェイプレイヤーにCATransformを使用しています。 1つは、フレームをクリアな色に設定して回転させると、ボールに問題は発生しないということです。私は一週間を費やして、OpenGLのすべてのグラフィックスを学習して書き直しても、同じことが起こった! – GCBenson