这是我的代码:
-(void) createNewImage {
UIImage * image = [UIImage imageNamed:@"boutonplay_03.png"];
imageView = [[UIImageView alloc] initWithImage:image];
[imageView setCenter:[self randomPointSquare]];
[[self view] addSubview:imageView];
ix=imageView.center.x;
iy=imageView.center.y;
X=(240-ix)/230;
Y=(160-iy)/230;
}
-(void)Animation{
imageView.center = CGPointMake(imageView.center.x + X, imageView.center.y + Y);
}
“CreateNewImage”每2秒钟一次,“动画”上有一个CADisplayLink。
我的问题是“imageView”的动画每2秒停止一次,因为创建了一个新的“imageView”并且这最后一次开始移动并且它在2秒后再次停止,并且一次又一次地停止...我想要什么就像是让“imageView”尽管创造了新的“imageView”而继续他的动画。我怎么能这样做呢?对不起我的英语我是法国人:/
答案 0 :(得分:0)
检查imageView ==是否为nil。
if (imageView == nil) {
imageView = [[UIImageView alloc] initWithImage:image];
}
//rest of code
答案 1 :(得分:0)
每次调用CreateNewImage
时,都在创建一个新的UIImageView而是检查它是否已经创建。
-(void) createNewImage {
if(imageView == nil) {
UIImage * image = [UIImage imageNamed:@"boutonplay_03.png"];
imageView = [[UIImageView alloc] initWithImage:image];
}
[imageView setCenter:[self randomPointSquare]];
[[self view] addSubview:imageView];
ix=imageView.center.x;
iy=imageView.center.y;
X=(240-ix)/230;
Y=(160-iy)/230;
}
答案 2 :(得分:0)
如果我理解你的情况,会发生什么:
您在createNewImage
;
此图片通过以下方法设置动画:
-(void)Animation{
imageView.center = CGPointMake(imageView.center.x + X, imageView.center.y + Y);
}
动画您的imageView
ivar;
创建新图片时,在2秒后,您将其重新分配给imageView
ivar,以便Animation
方法可以在调用时为其设置动画;
同时,您丢失了之前使用动画的上一张图片的引用,因此动画将不再为其设置动画。
现在我建议尝试以这种方式更改Animation
:
-(void)Animation{
for (UIView* imgView in self.view.subviews) {
imgView.center = CGPointMake(imgView.center.x + X, imgView.center.y + Y);
}
}
因此,这只会动画主视图的任何子视图。如果你唯一的子视图是想要制作动画的图像,那就应该没问题了。
编辑:
根据您在评论中的描述,我觉得发生的事情是addSubview
具有停止所有动画的效果。我不知道这是否与从磁盘加载图像有关,但我记得我之前也经历过类似的问题。我看到的唯一方法是预先创建和预先添加您需要的所有UIImageView(或最大数量的允许图像),将它们全部隐藏起来,然后逐个再次显示它们。这会使你的程序逻辑变得更复杂,但它会起作用。
另一种方法可能是使用CALayer
而不是UIVIew
。最好的方法是使用CABasicAnimation为图像制作动画。
如果你想使用UIImageView,你可以获得[imageView layer]
并添加这个而不是视图,如下所示:
[[self.view layer] addSublayer:[imageView layer]];
但我不确定这种方法是否有效。
希望他有所帮助。