0

我有一个简单的动画,可以反复上下移动幻灯片。这是代码:

    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]

这将使滑块保持在其原始位置而不是向下移动一次,并且动画仍然不会发生。

知道我缺少什么吗?谢谢!

4

2 回答 2

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];

}

当它进入视野时,它将动画化。

我将它作为先验测试运行。希望能帮助到你。

于 2014-01-30T23:55:32.163 回答
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)
}
于 2017-07-04T08:36:43.147 回答