2011-12-09 55 views
0

我正在使用从屏幕顶部删除UImages的降雪示例代码。我想在UIImageview上检测Touch并更新标签。如果我在IBOutlet中创建单个UIImageView并将其连接到触摸事件,则标签会正确更新。但是当我尝试将它应用于下降的UIImageView时,它不起作用。以下是我迄今为止:UITouch动画UIImage事件

- (void)viewDidLoad { 
    [super viewDidLoad]; 

    score = 0; 
    self.view.backgroundColor = [UIColor colorWithRed:0.5 green:0.5 blue:1.0 alpha:1.0]; 
    flakeImage = [UIImage imageNamed:@"flake.png"]; 

    [NSTimer scheduledTimerWithTimeInterval:(0.5) target:self selector:@selector(onTimer) userInfo:nil repeats:YES]; 
} 

- (void)onTimer 
{ 

    flakeView = [[UIImageView alloc] initWithImage:flakeImage]; 
    flakeView.opaque = YES; 
    flakeView.userInteractionEnabled = YES; 
    flakeView.multipleTouchEnabled = YES; 

    int startX = round(random() % 320); 
    int endX = round(random() % 320); 

    double scale = 1/round(random() % 100) + 1.0; 
    double speed = 1/round(random() % 100) + 1.0; 

    flakeView.frame = CGRectMake(startX, -100.0, 25.0 * scale, 25.0 * scale); 

    [self.view addSubview:flakeView]; 
    [self.view bringSubviewToFront:flakeView]; 

    [UIView beginAnimations:nil context:flakeView]; 
    [UIView setAnimationDuration:5 * speed]; 

    flakeView.frame = CGRectMake(endX, 500.0, 25.0 * scale, 25.0 * scale); 

    [UIView setAnimationDidStopSelector:@selector(onAnimationComplete:finished:context:)]; 
    [UIView setAnimationDelegate:self]; 
    [UIView commitAnimations];  
} 

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { 

    UITouch *touch = [touches anyObject]; 
    if ([touch view] == flakeView) 
    { 
     NSLog(@"tag %@",touch); 
     score = score + 1; 
     lbl1.text = [NSString stringWithFormat:@"%i", score];   
    } 
} 
+0

这里是你的问题的解决方案.. http://stackoverflow.com/questions/6852020/typing-while-animation-uitextview/6852092#6852092 –

回答

1

动画通常禁用触摸操作,所以你必须使用:

animateWithDuration:delay:options:animations:completion 

设置选项,包括接收触摸。

http://developer.apple.com/library/IOs/#documentation/WindowsViews/Conceptual/ViewPG_iPhoneOS/AnimatingViews/AnimatingViews.html#//apple_ref/doc/uid/TP40009503-CH6-SW1

IIRC你想要的选项:UIViewAnimationOptionAllowUserInteraction在完整列表上面的文档查找UIViewAnimationOptions。

+1

[UIView的animateWithDuration:0.1延时:0.0选项: UIViewAnimationOptionAllowUserInteraction动画:^ {UIView beginAnimations:nil context:flakeView]; [UIView setAnimationDuration:5 * speed]; flakeView.frame = CGRectMake(endX,500.0,25.0 * scale,25.0 * scale); [UIView setAnimationDidStopSelector:@selector(onAnimationComplete:finished:context :)]; [UIView setAnimationDelegate:self]; [UIView commitAnimations];} completion:nil]; – user865149

+0

我已经尝试过这一点,并把这个在我添加flakeView作为子视图后。但仍然没有成功。 – user865149

+0

动画块中的beginAnimations可能是问题所在。您希望允许交互的每个动画都必须指定UIViewAnimationOptionAllowUserInteraction。 –