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]; } } } } ```