2011-07-22 30 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 –