2011-07-22 32 views
0

这里是我的代码:问题的UIImageView动画

-(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秒alled,并有一个CADisplayLink的 “动画” 。

我的问题是,“imageView”的动画停止每2秒,因为一个新的“imageView”被创建,这最后一次开始移动,并在2秒后再次停止,并一次又一次......我什么想要让“imageView”继续他的动画,尽管创建了新的“imageView”。我该怎么做?对不起我的英文我是法国人:/

回答

0

检查看看imageView == nil与否。

if (imageView == nil) { 
imageView = [[UIImageView alloc] initWithImage:image]; 
} 
//rest of code 
+1

与您的代码有一个问题:imageView是动画,但几秒钟后它消失,另一个图像imageView被创建,它是动画等等... –

+1

没有问题,请尝试执行代码并看看。 –

+0

我实施了它,出现问题,我的评论是问题 –

0

您正在创建一个新的UIImageView每次打电话CreateNewImage

代替,检查,看看是否已经创建它。

-(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; 

} 
+0

与您的代码有一个问题:imageView是动画,但几秒钟后它消失,另一个图像imageView被创建,它是动画等 –

0

如果我理解正确的情况下,会发生什么情况是这样的:

  1. 您创建createNewImage新形象;

  2. 这个图像通过该方法动画:

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

    哪个动画您imageView的ivar;

  3. 当你创建一个新的形象,2秒后,可以将其重新分配给imageView伊娃,使Animation方法可以激活它,当它被调用;

  4. 在同一时间,您已经失去了之前您之前正在动画的图像的引用,所以动画不再生成动画。

现在是我的建议是试图以这种方式来改变Animation

-(void)Animation{ 
     for (UIView* imgView in self.view.subviews) { 
      imgView.center = CGPointMake(imgView.center.x + X, imgView.center.y + Y); 
     } 
    } 

所以,这将只是动画任何子视图的主视图。如果你唯一的子视图是你想要动画的图像,那应该没问题。

编辑:

在评论你的描述,似乎对我来说,什么情况是,addSubview具有停止不久所有的动画效果。我不知道这是否与从磁盘加载图像有关,但我记得我以前也经历过类似的问题。我看到的唯一方法是预先创建并预先添加所需的所有UIImageView(或最大数量的允许图像),将它们全部隐藏起来,然后逐个再次使它们可见。这会使你的程序的逻辑更加复杂,但它会起作用。

另一种方法可能是使用CALayer s而不是UIVIew s。最好的事情将是使用CABasicAnimation来为您的图像制作动画。

如果你想使用的UIImageView,你可以得到[imageView layer]并添加这一项,而不是观点的,像这样的:

[[self.view layer] addSublayer:[imageView layer]]; 

,但我不知道这种方法是可行的。

希望他的帮助。

+0

与您的代码还有另一个问题imageView是动画,但总是去卡住新图像的新位置查看 –

+0

尝试我的改变版本'动画'... – sergio

+0

我试试看问题是我以前的coment –