viewDidAppear上的动画UIImageView和UITableView

时间:2012-12-18 14:42:26

标签: ios uitableview animation uiimageview

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

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返回之前的高度。

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

感谢。

2 个答案:

答案 0 :(得分:1)

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

一种快速简便的方法是在dismissViewController:animated:方法中设置所需的值(如果您正在使用它),或者为模态设置委托方法。

如果你没有其中任何一个,你需要做一些检查,如果这是第一次加载。虽然这不是一个干净的方式来处理它。如果您展示更多代码,我们可能会找到更好的解决方案。

答案 1 :(得分:0)

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

此外,您的完成块中不需要return个语句。

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