Распознать событие касания в движущемся объекте - PullRequest
0 голосов
/ 13 мая 2011

Я создал UIImageView динамически и с анимацией (перемещение из одного места в другое.) В представлении.Я писал сенсорные события и пытался распознать прикосновение на изображении.Но он не может распознать событие касания, когда это изображение анимируется.

Но если я коснусь начального места, где я добавил изображение, оно распознает, но пока не работает анимация касания.

UIImageView *birdImage = [[UIImageView alloc] initWithFrame: CGRectMake(-67, 100, 67, 52)];
birdImage.image = [UIImage imageNamed: @"Flying_bird.png"];
birdImage.tag = 1000;
birdImage.userInteractionEnabled = YES;
[birdImage setContentMode: UIViewContentModeScaleAspectFit];
[self.view addSubview: birdImage];

[UIView animateWithDuration:10.0  delay:0.0 options: ViewAnimationOptionAllowUserInteraction animations:^{ 
          birdImage.frame = CGRectMake(547, 100, 67, 52); 
        } completion:nil];

- (void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 
{
     UITouch *touch = [[event allTouches] anyObject];
     NSLog(@"Tag: %d", [[touch view] tag]);
}

Пожалуйста, любой может помочь в этом.

Ответы [ 2 ]

1 голос
/ 13 мая 2011

Это будет перемещать изображение слева направо.и при касании изображения ваш метод touchesBegan

вызывает, и вы можете делать все что угодно в своем событии touchesBegan.

 UIImage *image = [UIImage imageNamed:@"image.png"];
 UIImageView *imageView = [[UIImageView alloc] initWithImage:image];
 imageView.frame = CGRectMake(-1024, 0, 1024, 768);
 [self.view addSubview:imageView];
 [imageView release]; //Your imageView is now retained by self.view

Вам, вероятно, нужен этот метод -animateWithDuration: delay: options: animations: complete:,Замените текущий метод на

 [UIView animateWithDuration:10.0
                       delay:0.0
                     options: UIViewAnimationOptionAllowUserInteraction
                  animations:^{
                      imageView.frame = CGRectMake(0, 0, 1024, 768); 
                  }
                  completion:nil];

Это должно включить касания во время анимации.

0 голосов
/ 13 мая 2011

Вам нужно будет выполнить тест на попадание в CALayer представления изображения. Все представления содержат CALayer, а CALayer содержит как уровень модели, так и уровень представления. Вам нужен доступ к слою презентации:

[[imageView.layer presentationLayer] hitTest:point]
...