Распознать событие касания в движущемся объекте

Я создал 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]);
}

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


person MohanVydehi    schedule 13.05.2011    source источник


Ответы (2)


Это переместит изображение слева направо. и при прикосновении к изображению ваши прикосновения начали метод

звонки, и вы можете сделать что-нибудь в своем событии 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:completion:. Замените текущий метод на

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

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

person Mehul Mistri    schedule 13.05.2011
comment
Привет Мистри, Спасибо за ваш ответ. Я тоже пробовал с вашим кодом, но не работает. Я отредактировал свой вопрос, пожалуйста, посмотрите на код и дайте мне знать, где я делаю ошибку. - person MohanVydehi; 16.05.2011

Вам нужно будет выполнить тест на попадание в CALayer, поддерживающий представление изображения. Все представления содержат CALayer, а CALayer содержит как уровень модели, так и уровень представления. Уровень представления — это тот, к которому вам нужно получить доступ:

[[imageView.layer presentationLayer] hitTest:point]
person pzearfoss    schedule 13.05.2011