Обнаружение столкновения между несколькими UIImageViews, которые анимированы с тем же именем - PullRequest
2 голосов
/ 11 июля 2011

Я пытаюсь обнаружить конфликт между падающим / анимированным UIImageView, который создается каждую секунду с помощью NSTimer.Вот код:

-(void)newobject{

    int randomx = 76+ arc4random() %(290);
    int randomDuration = 2+ arc4random() %(6);
    int randomImage = 1+ arc4random() %(3) ;

    NewObject = [[UIImageView alloc] initWithFrame:CGRectMake(randomx,0,36 ,36)];        
    UIImage *imag = [UIImage imageNamed:@"ball.png"];
    [NewObject setImage:imag];
    [self.view addSubview:NewObject];

    numberofObjects += 1;
    NewObject.tag = numberofObjects;

    [UIView beginAnimations:nil context:nil];
    [UIView setAnimationDuration:randomDuration];
    [UIView setAnimationBeginsFromCurrentState:YES];
    [UIView setAnimationDelegate:self];
    [UIView setAnimationDidStopSelector:@selector(animationDone:finished:context:)];
    NewObject.frame = CGRectMake(randomx, 300,NewObject.frame.size.width,NewObject.frame.size.height);

    [UIView commitAnimations];
}

Этот код создает новый UIImageView с именем NewObject и анимирует его вниз по экрану.Для обнаружения столкновения у меня есть еще один NSTimer, который вызывается каждые 1.0 / 60.Вот код:

-(void)Collison{

    for (int i = 1; i < numberofObjects; i++) {
        UIImageView *image = NewObject;

        [image viewWithTag:i];
        CALayer *layer = image.layer.presentationLayer;
        CGRect NewObjectFrame =  layer.frame;
        CALayer *layer2 = Sprint.layer.presentationLayer;
        CGRect SprintFrame = layer2.frame;

        if (CGRectIntersectsRect(NewObjectFrame, SprintFrame)) {
            [self StopTimers];

            NSLog(@"hello");
        }
    }
}

Проблема в том, что консоль говорит "Это работает", но UIImage не конфликтует, и я могу столкнуть символ с изображением, но консоль ничего не говорит и в то же времяесли я пытаюсь сопоставить символ с UIImageView, он работает.Я пытаюсь сказать, что это ненадежно.Может кто-нибудь помочь?

обновление: я редактировал код, но теперь он обнаруживает последнее добавленное представление uiimage.

1 Ответ

0 голосов
/ 11 октября 2011

хорошо, я понял. Это просто, поэтому все, что вам нужно сделать, это создать NSMutableArray и проверить массив на наличие коллизий с циклом for.

...