我必须做一个小游戏,其中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];
}
谢谢你的帮助!
答案 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框架!