2012-11-17 30 views
2

當我的對象在屏幕上移動時,需要處理對象的觸摸。當touchesBegan調用時,我需要隱藏我的對象。animateWithDuration和touchesBegan不能在對中工作

這是我的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]; 
      } 
     } 
    } 
} 

回答

9

也許你缺少AllowAnimatedContent。試着改變你的

UIViewAnimationOptionAllowUserInteraction

UIViewAnimationOptionAllowUserInteraction | UIViewAnimationOptionAllowAnimatedContent


...另一種可能是使用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; 
} 
+0

我已經添加了這個,但它不能幫助我。我認爲問題在線程中。因爲動畫的方法抓住我的對象,我不能在主線程中處理它 –

+0

我實際上會推薦使用'UITapGestureRecognizer'來做這件事。 – nooitaf

0

你需要,如果你還檢查了這需要檢測與對象的交集。

我已編輯touchesBegan方法,它的工作原理。

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { 
    UITouch *touch = [[event allTouches] anyObject]; 
    CGPoint touchLocation = [touch locationInView:self.view]; 
    for (UIImageView *imageView in rockets) { 
     CALayer *bbl1ObjPresentationLayer = (CALayer*)[imageView.layer presentationLayer]; 
     if(CGRectIntersectsRect(bbl1ObjPresentationLayer.frame, CGRectMake(touchLocation.x, touchLocation.y, 1, 1))) { 
      NSLog(@"intersect"); 
       //They are intersecting 
      } 
} 
} 

如果你這樣做使用CALayer insted UIImageView對象這工作正確。檢查這個答案link

相關問題