【问题标题】:Animated UIImageView and UITableView on viewDidAppearviewDidAppear 上的动画 UIImageView 和 UITableView
【发布时间】:2012-12-18 14:42:26
【问题描述】:

我有一个UIViewController,我的徽标居中,UITableView alpha 为 0。

viewDidAppear: 我有这个:

[UIView animateWithDuration:0.6 delay:0.0 options:UIViewAnimationCurveEaseInOut animations:^{
    [self.logo setFrame:CGRectMake(0.0f, self.view.frame.size.height - 194.0f, 320.0f, 194.0f)];
} completion:^(BOOL finished) {
    [self.table setFrame:CGRectMake(0.0f, 0.0f, 320.0f, self.view.frame.size.height - 194.0f)];

    [UIView animateWithDuration:0.4 delay:0.0 options:UIViewAnimationCurveEaseInOut animations:^{
        [self.table setAlpha:1.0];
    } completion:^(BOOL finished) {
        return;
    }];

    return;
}];

好的,动画就是我想要的。

但是当我调用presentModalViewController: 显示下一个视图时,UIImageView 回到屏幕中心,UITableView 回到之前的高度。

动画完成后如何保持相同的大小和位置,甚至改变视图?

谢谢。

【问题讨论】:

  • 你什么时候看到他们回去?在您关闭模态视图控制器后或显示时?

标签: ios uitableview animation uiimageview


【解决方案1】:

我假设您将原始帧设置在 viewDidLoad 中,除非模态清除您的系统内存,否则这很好。视图会尽可能地被缓存。因此,如果您的 modal 使用了足够的内存来重置它,viewDidLoad 会再次被调用来重置您的视图。

解决此问题的一种快速简便的方法是在 dismissViewController:animated: 方法(如果您正在使用它)中设置您想要的值,或者为模式设置一个委托方法。

如果您没有其中任何一个,则需要以某种方式检查这是否是第一次加载。不过,这不是一种干净的处理方式。如果您显示更多代码,我们可能会找到更好的解决方案。

【讨论】:

    【解决方案2】:

    注意:您使用了错误的选项常量。而不是UIViewAnimationCurveEaseInOut,应该使用UIViewAnimationOptionCurveEaseInOut。这可能不会影响您的问题,但它很糟糕。

    此外,您不需要在完成块中使用 return 语句。

    我会检查您的 viewWillDisappear 和 viewDidDisappear 方法中的代码。您可能正在那里(甚至在 layoutSubviews 中)进行初始布局,这正在重置视图。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-24
      • 2012-02-09
      • 1970-01-01
      • 2011-10-24
      • 2018-06-16
      相关资源
      最近更新 更多