animateWithDuration and touchesBegan don't work in pair

ios

Solution

Maybe you are missing the AllowAnimatedContent. Try changing your

`UIViewAnimationOptionAllowUserInteraction`

to

`UIViewAnimationOptionAllowUserInteraction | UIViewAnimationOptionAllowAnimatedContent`

...another way might be to use `UITapGestureRecognizer` :

- (void)createViews {
    rockets = [[NSMutableArray alloc] init];
    for (NSInteger i = 1; i <= 6; i++) {
        UIView *view = [UIView new];
        view.backgroundColor = [UIColor redColor];
        view.frame = CGRectMake((i * 60), 100, 50, 50);

        UITapGestureRecognizer * tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(rocketTouched:)];
        [view addGestureRecognizer:tap];

        [self.view addSubview:view];
        [rockets addObject:view];
    }
    [NSTimer scheduledTimerWithTimeInterval:2.0 target:self selector:@selector(moveViews) userInfo:nil repeats:YES];
}
- (void)moveViews {
    for (UIView * view in rockets)  {
        [UIView animateWithDuration:5.0 delay:0.0 options:UIViewAnimationOptionAllowUserInteraction|UIViewAnimationOptionAllowAnimatedContent animations:^{
            view.frame = CGRectMake(view.frame.origin.x -10, 0, view.frame.size.width, view.frame.size.height);
        } completion:nil];
    }
}
- (void)rocketTouched:(UITapGestureRecognizer*)tap {
    tap.view.hidden = YES;
}

Problem

I need to handle touch on my object when it move across my screen. When touchesBegan called I need to hide my object. this is my code in UIViewController: ``` - (void)win { for (NSInteger i = 1; i <= 6; i++) { UIImageView *imageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:[NSString stringWithFormat:@"rocket_%d.png", i]]]; imageView.tag = 1000; CGSize size = imageView.image.size; [imageView setFrame:CGRectMake(200 + (i * 60), 500, size.width, size.height)]; [self.view addSubview:imageView]; [rockets addObject:imageView]; [imageView setUserInteractionEnabled:YES]; } [self startRockets]; } - (void)startRockets { CGFloat timeInterval = 1.0; for (UIImageView *imageView in rockets) { [UIView animateWithDuration:5.0 delay:timeInterval options:UIViewAnimationOptionAllowUserInteraction animations:^{ [imageView setFrame:CGRectMake(imageView.frame.origin.x, 0, imageView.frame.size.width, imageView.frame.size.height)]; } completion:nil]; timeInterval += 1.0; } } - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { UITouch *touch = [[event allTouches] anyObject]; CGPoint touchLocation = [touch locationInView:self.view]; NSArray *views = [self.view subviews]; for (UIView *v in views) { if (v.tag == 1000) { if (CGRectContainsPoint(v.frame, touchLocation) == YES) { [v setHidden:YES]; } } } } ```

Original source

Related problems