大家好,我是法国人,请问我英文的问题。我的问题是:屏幕中央有一个名为viewToRotate的图像,然后在屏幕外创建了一个名为flakeView的图像,然后是移动到中心,然后计时器每秒钟执行一次(在屏幕外部创建flakeView,然后将其移到屏幕中心)。
我想做的是:如果flakeView和viewToRotate发生碰撞,则将viewToRotate的alpha降低为0.5。但是,当flakeView出现在屏幕上时,将在不使viewToRotate和flakeView发生冲突的情况下调用减少Alpha的动作,因此它们在碰触之前会发生碰撞。我不知道为什么请问我该如何解决。这是代码:
UIImageView* flakeView = [[[UIImageView alloc] initWithImage:flakeImage] autorelease];
// use the random() function to randomize up our flake attributes
int startY = round(random() % 320);
// set the flake start position
flakeView.center = CGPointMake(490, startY);
flakeView.alpha = 1;
// put the flake in our main view
[self.view addSubview:flakeView];
[UIView animateWithDuration:7
animations:^{
// set the postion where flake will move to
flakeView.center = viewToRotate.center;
}];
}
-(void)checkCollision{
if(CGRectIntersectsRect(flakeView.frame, viewToRotate.frame) == 1)
{
viewToRotate.alpha=0.5;
}
}
最佳答案
我不建议在viewDidLoad上使用计时器。我相信您应该将计时器设置为其他功能。即使您不使用viewDidLoad进行其他操作。
另一件事是UIView动画。即使您每隔60 fps就有一个计时器,动画也不会更改动画对象的属性。因此,在创建动画之前,请设置一次这些属性。当您创建动画时,将第二次设置相同的属性。就是这样。从现在开始,在动画运行时,如果您检查属性,将始终获得第二个值。
要拥有有效的代码,一个选择是在特定的时间间隔为每个步骤创建UIView动画(并执行属性检查)。或使用OpenGL。