0

2 つの画像が同じ線上を水平に移動する小さなゲームを実行する必要があります。2つではなく新しい画像を表示するために、それらがいつ重ねられるかを知りたいです。

それを行う最良の方法は何ですか?

私がやろうと思っていた方法:

UIImageViews のアニメーション中に位置をある程度知る必要があります。2 つの imageViews が近いことがわかったら、タイマーを使用して imageView を更新します。

私はこれまでに Image を移動するためにこの機能を持っています:

- (void)moveImage:(UIImageView *)image duration:(NSTimeInterval)duration
        curve:(int)curve x:(CGFloat)x y:(CGFloat)y
{
    // Setup the animation

    [UIView beginAnimations:nil context:NULL];
    [UIView setAnimationDuration:duration];
    [UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];
    [UIView setAnimationBeginsFromCurrentState:YES];

    // The transform matrix
    CGAffineTransform transform = CGAffineTransformMakeTranslation(x, y);
    image.transform = transform;

    // Commit the changes
    [UIView commitAnimations];

}

助けてくれてありがとう!

4

1 に答える 1

1

毎秒何度も位置を確認するのは最善の方法ではないと思います。可能であれば、ビューが重なる時点を事前に計算する必要があります。

いずれにせよ、画像ビューを移動するためにアフィン変換を使用するのではなく、ビューのフレームまたは中央のプロパティを変更して、画像ビューのフレームを移動するだけにしてください!

これを事前に計算できない場合は、タイマーとチェックを実装する方法に関するいくつかのヒントを次に示します。

タイマーを実装するには、次を使用できます。

        [NSTimer scheduledTimerWithTimeInterval:0.1 target:self selector:@selector(checkPosition:) userInfo:nil repeats:YES];

これにより、0.1 秒ごとに関数が呼び出されます。

- (void)checkPosition:(NSTimer *)timer 

このメソッドでは、imageViews UILayer にアクセスして、このビューの実際の位置を調べることができます。

CGFrame currentFrame = [imageView.layer presentationLayer].frame;

これを行うには、QuartzCore フレームワークをインポートする必要があります!

于 2013-04-08T15:44:30.653 に答える