2014-01-30 118 views
0

我有一個簡單的動畫,可以反覆上下移動一張幻燈片。這裏是代碼:提供ViewController忽略UIView動畫

CGRect frm_down = slider.frame; 
    frm_down.origin.y += 50; 

    [UIView animateWithDuration:0.7 
          delay:0.0 
         options:UIViewAnimationOptionAutoreverse | UIViewAnimationOptionRepeat 
        animations:^{ 
         slider.frame = frm_down; 
        } 
        completion:NULL]; 

這是非常直接和偉大的工程;然而,當我呈現視圖(自我presentViewController:動畫:)時,動畫不會發生。

實際上,滑塊被立即移動到較低的位置(就好像它只調用一次動畫並將其移回而不是備份)。

我也試過這樣:

CGRect frm_down = [[[slider layer] presentationLayer] frame] 

這將保持滑塊在其原來的位置,而不是一次向下移動,並且動畫仍然不會發生。

任何想法我失蹤?謝謝!

回答

0

您的動畫有效。我測試了它。

你需要的是:

而不是使用:

self presentViewController:animated: 

使用此:

[self addChildViewController:<YOUR_VIEWCONTROLLER>]; 
[self.view addSubview:<YOUR_VIEWCONTROLER>.view]; 
[<YOUR_VIEWCONTROLER> didMoveToParentViewController:self]; 

附錄:

在您的視圖控制器的viewDidAppear,添加以下代碼:

- (void)viewDidAppear:(BOOL)animated 
{ 
    [super viewDidAppear:animated]; 
    CGRect frm_down = self.view.frame; 
    frm_down.origin.y += 50; 

    [UIView animateWithDuration:0.7 
          delay:0.0 
         options:UIViewAnimationOptionAutoreverse | UIViewAnimationOptionRepeat 
        animations:^{ 
         self.view.frame = frm_down; 
        } 
        completion:NULL]; 

} 

它在進入視圖時會生成動畫。

我把它作爲一個先驗測試。希望能幫助到你。

+2

偉大的作品!具體將動畫代碼放在viewDidAppear中!謝啦! –

+0

@KyleBegeman歡迎,很高興它爲亞:-)工作 – Unheilig

0

在斯威夫特:

override func viewDidAppear(_ animated: Bool) { 
      super.viewDidAppear(true) 

    var from_down = self.view.frame 
    from_down.origin.y += 50 

    UIView.animate(withDuration: 0.2, delay: 0.0, options: .autoreverse, animations: { 
     self.view.frame = from_down 
     }, completion: nil) 
}