大家好,我是法国人,请问我英文的问题。我的问题是:屏幕中央有一个名为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。

10-08 06:29