1

我有一个UIViewController徽标居中且UITableViewalpha 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返回之前的高度。

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

谢谢。

4

2 回答 2

1

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

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

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

于 2013-01-16T20:17:07.597 回答
0

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

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

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

于 2013-01-16T19:47:47.823 回答