2014-01-27 63 views
0

我有以下例程來簡單地在屏幕上爲圖像設置動畫效果。簡單移動uiimageview代碼不動畫

-(void)animateGrasland { 
     [UIView animateWithDuration:5 delay:0.0 options:UIViewAnimationOptionCurveLinear 
         animations:^{ 
          CGRect newFrame = CGRectMake(100,100,1024,768); 
          self.grasland.frame = newFrame; 

         } 
         completion:^(BOOL finished) { 

         } 
     ]; 
} 

我想在加載視圖後立即開始動畫。並持續5秒。所以我一直在試驗幾個選項來調用函數。

選項I - 此選項會立即在新位置顯示圖像,無動畫!

- (void)viewDidLoad { 
    [super viewDidLoad]; 
    [self animateGrasland]; 
} 

選項II - 此選項將圖像動畫化到新的位置。答對了。

- (void)viewDidLoad { 
    [super viewDidLoad]; 
    [NSTimer scheduledTimerWithTimeInterval:0.001 target:self selector:@selector(animateGrasland) userInfo:nil repeats:NO]; 
} 

我有時間玩一點延遲,動作開始時間爲0.001秒。如果持續時間爲0.0001秒,則圖像立即顯示在新位置,因此無需動畫。我期望解析viewDidLoad(和其他後臺例程導致這一點)的持續時間。

因此,因爲在故事板中設置的初始位置(0,0)在viewDidLoad期間更新,所以不會觸發動畫。動畫立即移動到完成狀態。

+1

開始它,您希望動畫持續5秒或您想要在5秒後執行動畫嗎? – Divya

+0

嘗試移動代碼'CGRect newFrame = CGRectMake(0,0,1024,768); self.grasland.frame = newFrame;'到其他地方,比如'viewDidLoad'方法。 – GoGreen

+0

我剛剛在正常的UIView上試過你的代碼,它按預期工作 - 動畫持續5秒。你在代碼中運行這個動畫嗎? self.grasland是一個UIView對象嗎? – tanzolone

回答

0

嘗試調用viewDidAppear:代替viewDidLoadanimateGrasland,像這樣:視圖被加載到內存後

- (void)viewDidAppear:(BOOL)animated { 
    [super viewDidAppear:animated] 
    [self animateGrasland]; 
} 

// Remove your implementation of the viewDidLoad method or at least the call to animateGrasland 

viewDidLoad被調用,而視圖添加到視圖層次之後viewDidAppear:被調用。就你而言,這意味着在視圖可見之後。由於您希望在視圖可見時立即開始動畫,因此您應該從viewDidAppear:

+0

這個更好,就像使用一個定時器一樣。謝謝! – Vincent