0

我必须做一个小游戏,其中 2 个图像在同一条线上水平移动。我想知道它们何时叠加,以便显示新图像而不是 2。

最好的方法是什么?

我想这样做的方式:

我需要在我的 UIImageViews 动画期间知道位置,当我发现 2 个 imageViews 接近时,我会尝试使用计时器来刷新 imageView。

到目前为止,我有这个功能来移动图像:

- (void)moveImage:(UIImageView *)image duration:(NSTimeInterval)duration
        curve:(int)curve x:(CGFloat)x y:(CGFloat)y
{
    // Setup the animation

    [UIView beginAnimations:nil context:NULL];
    [UIView setAnimationDuration:duration];
    [UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];
    [UIView setAnimationBeginsFromCurrentState:YES];

    // The transform matrix
    CGAffineTransform transform = CGAffineTransformMakeTranslation(x, y);
    image.transform = transform;

    // Commit the changes
    [UIView commitAnimations];

}

谢谢你的帮助 !

4

1 回答 1

1

我认为每秒多次检查位置并不是最好的方法。如果可以,您应该预先计算视图重叠的时间点!

无论如何,您不应该使用仿射变换来移动图像视图,而只是通过更改视图的框架或中心属性来移动图像视图的框架!

如果你不能预先计算,这里有一些关于如何实现定时器和检查的提示:

为了实现计时器,您可以使用:

        [NSTimer scheduledTimerWithTimeInterval:0.1 target:self selector:@selector(checkPosition:) userInfo:nil repeats:YES];

这将每 0.1 秒调用一次函数。

- (void)checkPosition:(NSTimer *)timer 

在此方法中,您可以通过调用访问 imageViews UILayer 以找出该视图的实际位置

CGFrame currentFrame = [imageView.layer presentationLayer].frame;

为了能够做到这一点,您必须导入 QuartzCore 框架!

于 2013-04-08T15:44:30.653 回答