viewDidAppear 上的动画 UIImageView 和 UITableView
Posted
技术标签:
【中文标题】viewDidAppear 上的动画 UIImageView 和 UITableView【英文标题】:Animated UIImageView and UITableView on viewDidAppear 【发布时间】: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
回到之前的高度。
动画完成后如何保持相同的大小和位置,甚至改变视图?
谢谢。
【问题讨论】:
你什么时候看到他们回去?在您关闭模态视图控制器后或显示时? 【参考方案1】:我假设您将原始帧设置在 viewDidLoad
中,除非模态清除您的系统内存,否则这很好。视图会尽可能地被缓存。因此,如果您的 modal 使用了足够的内存来重置它,viewDidLoad
会再次被调用来重置您的视图。
解决此问题的一种快速简便的方法是在 dismissViewController:animated:
方法(如果您正在使用它)中设置您想要的值,或者为模式设置一个委托方法。
如果您没有其中任何一个,则需要以某种方式检查这是否是第一次加载。不过,这不是一种干净的处理方式。如果您显示更多代码,我们可能会找到更好的解决方案。
【讨论】:
【参考方案2】:注意:您使用了错误的选项常量。而不是UIViewAnimationCurveEaseInOut
,应该使用UIViewAnimationOptionCurveEaseInOut
。这可能不会影响您的问题,但它很糟糕。
此外,您不需要在完成块中使用 return
语句。
我会检查您的 viewWillDisappear 和 viewDidDisappear 方法中的代码。您可能正在那里(甚至在 layoutSubviews 中)进行初始布局,这正在重置视图。
【讨论】:
以上是关于viewDidAppear 上的动画 UIImageView 和 UITableView的主要内容,如果未能解决你的问题,请参考以下文章
在 ViewDidAppear 上更改核心动画持续时间似乎不起作用
在带有 Xamarin.iOS 的 iOS 7 上的 ViewDidAppear 方法中显示阻止的 UIAlertView 不起作用