2014-01-30 3 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]; 

이것은 매우 간단하고 잘 작동합니다. 그러나, 내가보기 (self presentViewController : animated :)를 제시 할 때 애니메이션이 발생하지 않습니다.

사실, 슬라이더는 즉시 낮은 위치로 이동됩니다 (마치 애니메이션을 한 번만 호출하고 뒤로 이동했지만 뒤로 이동하지 않은 것처럼).

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) 
}