1

以下に示すviewDidAppearにアニメーションがあります

-(void)viewDidAppear:(BOOL)animated
{
    for (int i = 0; i < 100; i++) {

        p = arc4random_uniform(320)%4+1; //global integer

        CGRect startFrame = CGRectMake(p*50, -50, 50, 50);
        CGRect endFrame   = CGRectMake(p*50, CGRectGetHeight(self.view.bounds) + 50,
                                       50,
                                       50);

        animatedView = [[UIView alloc] initWithFrame:startFrame];
        animatedView.backgroundColor = [UIColor redColor];

        [self.view addSubview:animatedView];

        [UIView animateWithDuration:2.f
                              delay:i * 0.5f
                            options:UIViewAnimationCurveLinear
                         animations:^{
                             animatedView.frame = endFrame;
                         } completion:^(BOOL finished) {
                             [animatedView removeFromSuperview];
                         }];
    }
}

画面の上から小さな正方形を作成し、下に移動するだけです。また、x 軸の加速度計によって制御される UIImageView もあります。エイムはアニメーション オブジェクトに触れていません。単純なレースゲームのように。しかし、imageView とアニメーションの間の衝突を検出する方法を見つけることができませんでしたか?

4

2 に答える 2

5

最初に、すべてのアニメーション化されたビュー オブジェクトを配列に保存して、画像ビューとの衝突をチェックする必要があります。したがって、.h ファイルで、アニメーション ビューを保持する NSArray を作成します。

NSMutableArray animatedViews;

次にviewDidLoadで初期化します

animatedViews = [[NSMutableArray alloc] init];

次に、コードviewWillAppearを変更して行を追加します

[self.view addSubview:animatedView];
[animatedViews addObject:animatedView];

次に、衝突をチェックする関数を作成します。スケジュールされたタイマーのパラメーターが必要です

-(void) checkCollision: (NSTimer *) theTimer{
    for(int i = 0; i < [animatedViews count]; i++) {
        UIView *theView = [animatedViews objectAtIndex:index];
        if (CGRectIntersectsRect(theView.frame, yourImageView.frame) {
           // the image collided
           // stop the timer and do your work here
        }
    }
}

次に、viewWillAppear でこの行を追加して、タイマーが 0.5 秒ごとに呼び出されるようにスケジュールし、衝突をチェックする関数を呼び出します。

[NSTimer scheduledTimerWithTimeInterval: 0.5  
                             target: self  
                           selector: @selector(checkCollision:)  
                           userInfo: nil  
                            repeats: YES];
于 2012-08-24T08:15:48.333 に答える
3

問題はこのテストif (CGRectIntersectsRect(theView.frame, yourImageView.frame) にあります:ビューのpresentationLayerを確認する必要があります:

CGRect movingFrame = [[theImage.layer presentationLayer] frame];
    if (CGRectIntersectsRect(movingFrame, panier.frame)) {           
        // the image collided            
    }
于 2012-10-11T21:03:19.737 に答える