2011-03-11 102 views
0

我想創建一個簡單的翻譯動畫到UIImageView。 起初,我願意使用[UIView動畫]類,但是我意識到它不能對動畫過程中的事件(例如與其他對象的簡單碰撞)進行足夠的控制。可可觸摸 - 用定時器動畫

我當時想過使用一個簡單的線程,將修改我的UIImageView的中心座標,然後睡覺,然後重複,直到動畫完成,或者直到事情發生(見:碰撞或對象本身消失)

這是我寫的代碼:

-(void)animateImageView:(UIImageView*)view{ 
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; 
    float totalTime=6.0f; 
    float elapsedTime=0; 
     while(totalTime<=elapsedTime){ 
         if(conditions){...}//here are my checks 
      CGPoint newCenter=CGPointMake(view.center.x+10, view.center.y); 
      view.center=newCenter; 
      NSLog(@"%f",view.center.x); 
      elapsedTime+=0.1; 
      [NSThread sleepForTimeInterval:0.1]; 
      } 
    [view performSelectorOnMainThread:@selector(removeFromSuperview) withObject:nil waitUntilDone:YES]; 

    [pool release]; 

}

事實是,我的形象不會移動,但NSLog的命令顯示正確的座標在圖像的中心。 Ani的想法爲什麼? 也許這是錯誤的方法?

+0

你試過把[view setNeedsDisplay]放進去嗎?在那裏?通常情況下,如果您更改框架,視圖會重新繪製,但這可能值得一試。 – Robin 2011-03-11 11:10:47

+0

我試圖插入那一行,沒有任何變化。有時看起來像我的形象移動一點點,我不明白我錯了什麼.. – Lorenzo 2011-03-11 11:26:35

回答

0

所有的UIKit類都不是線程安全的。所以只能從主線程中使用它們(view.center=newCenter;)。

+1

你是對的。我通過主線程完成了新中心的分配,然後通過performSelectorOnMainThread調用它。現在起作用了。非常感謝你,我花了很多時間才發現這一點。 – Lorenzo 2011-03-11 11:37:01