动画调整UIViewController的大小

时间:2018-04-03 19:56:30

标签: ios objective-c uiviewcontroller uikit

在我的应用中,我正在尝试制作动画,以便在收到通知时调整UIViewController的大小。

我创建了一个封装了孩子的容器UIViewController。然后我编写了下面的代码来调整孩子UIViewController的大小。

[UIView animateKeyframesWithDuration:0.5
                               delay:0
                             options:0
                          animations:^{
                              [UIView addKeyframeWithRelativeStartTime:0.0 relativeDuration:0.5 animations:^{
                                  for(int i = 0; i < [self.viewControllers count]; i++) {
                                      UIViewController *vc = [self.viewControllers objectAtIndex:i];
                                      vc.view.frame = CGRectMake(0, [self topOffset], self.view.frame.size.width, self.view.frame.size.height-[self topOffset]);
                                  }
                              }];
                          } completion:^(BOOL finished) {

                          }];

然而,现在发生的是立即执行高度变化并且y变化是动画的,使得它看起来像是向下滑动。关于我可以改变什么以使它只是调整大小的任何想法?

1 个答案:

答案 0 :(得分:0)

在动画之前,所有VC必须有一个框架

 for(int i = 0; i < [self.viewControllers count]; i++) {
   UIViewController *vc =   [self.viewControllers objectAtIndex:i];
   vc.view.frame =  self.view.frame;

 }
[UIView animateKeyframesWithDuration:0.5
                               delay:0
                             options:0
                          animations:^{
                              [UIView addKeyframeWithRelativeStartTime:0.0 relativeDuration:0.5 animations:^{
                                  for(int i = 0; i < [self.viewControllers count]; i++) {
                                      UIViewController *vc = [self.viewControllers objectAtIndex:i];
                                      vc.view.frame = CGRectMake(0, [self topOffset], self.view.frame.size.width, self.view.frame.size.height-[self topOffset]);
                                  }
                              }];
                          } completion:^(BOOL finished) {

                          }];

高度必须像这样计算

 self.view.frame.size.height - 2 * [self topOffset]

如果你想从底部到相同的距离