如何知道UIImageView移动的当前位置?

时间:2013-04-08 15:34:48

标签: iphone ios animation core-animation uiviewanimation

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

最好的方法是什么?

我想要的方式:

我需要在UIImageViews动画期间稍微了解一下这个位置,当我发现2个imageViews关闭时,我会尝试使用timer来刷新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];

}

谢谢你的帮助!

1 个答案:

答案 0 :(得分: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框架!