uiimageView动画的问题

时间:2011-07-22 18:38:59

标签: iphone xcode animation uiimageview allocation

这是我的代码:

-(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”而继续他的动画。我怎么能这样做呢?对不起我的英语我是法国人:/

3 个答案:

答案 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)

如果我理解你的情况,会发生什么:

  1. 您在createNewImage;

  2. 中创建了新图片
  3. 此图片通过以下方法设置动画:

    -(void)Animation{
       imageView.center = CGPointMake(imageView.center.x + X, imageView.center.y + Y);
    }
    

    动画您的imageView ivar;

  4. 创建新图片时,在2秒后,您将其重新分配给imageView ivar,以便Animation方法可以在调用时为其设置动画;

  5. 同时,您丢失了之前使用动画的上一张图片的引用,因此动画将不再为其设置动画。

  6. 现在我建议尝试以这种方式更改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]];
    

    但我不确定这种方法是否有效。

    希望他有所帮助。