iOS:UIView 动画,没有动画发生

Posted

技术标签:

【中文标题】iOS:UIView 动画,没有动画发生【英文标题】:iOS: UIView animation, no animating happening 【发布时间】:2011-02-11 11:08:20 【问题描述】:

有一个令人费解的问题。我有一个通用应用程序,在 iPad 和 iPhone 版本之间有很多共享代码。 nib 中有不同的布局,但视图和视图层次结构基本相同 - 一个 UIView 用作两个兄弟 UITextView 的容器。

带有孩子的 UIView 主视图: UITextView 段落TextView UITextView notesTextView

一个 UITextView 是隐藏的,另一个是可见的。

以下是我的代码。注释掉的部分是我最初的动画尝试。这在 iPad 上可以正常工作,但在 iPhone 上却不行。未注释的部分取 2,使用文档中推荐的方法。未注释的代码在 iPad 或 iPhone 上都不起作用 - 它隐藏/取消隐藏我的视图,但没有任何动画。如果我将代码添加到也被执行的完成块中,那么它正在做某事,只是没有动画。

/*  
[UIView beginAnimations:nil context:nil];  
[UIView setAnimationDuration:1.0];  
[UIView setAnimationTransition:UIViewAnimationTransitionFlipFromRight forView:mainView cache:YES];  

passageTextView.hidden = YES;  
notesTextView.hidden = NO;  

[UIView commitAnimations];  
*/  

UIViewAnimationOptions options = UIViewAnimationOptionBeginFromCurrentState | UIViewAnimationTransitionFlipFromRight;  

[UIView transitionWithView:mainView  
                  duration:1.0  
                   options:options  
                animations:^ passageTextView.hidden = YES; notesTextView.hidden = NO;   
                completion:NULL];  

编辑:仍在解决问题,希望有人提出建议。

其他更新

找出为什么以下在 iPhone 中不起作用:

[UIView beginAnimations:nil context:nil];  
[UIView setAnimationDuration:1.0];  
[UIView setAnimationTransition:UIViewAnimationTransitionFlipFromRight forView:mainView cache:YES];  

passageTextView.hidden = YES;  
notesTextView.hidden = NO;  

[UIView commitAnimations];

我忽略了在 Interface Builder 中将视图连接到 mainView。几个小时的调试,我刚刚想检查一下。

但是,我仍然不知道为什么动画块不适用于 iPhone 或 iPad。我尝试了几种方法,但即使显示/隐藏工作正常,我也没有得到任何动画。

【问题讨论】:

【参考方案1】:

我认为您使用了错误的动画选项。

UIViewAnimationOptionTransitionFlipFromLeft 替换您的第二个动画选项(注意AnimationTransition 之间的Option

我相信UIViewAnimationTransitionFlipFromLeft(这是您的代码中的内容)是UIViewAnimationTransition,而不是UIViewAnimationOptions

【讨论】:

我曾考虑过这一点,但 Apple 的动画视图编程指南部分有一个使用 UIViewAnimationOptionTransitionFlipFromRight 作为 UIViewAnimationOptions 选项的示例。在这种情况下,他们使用 transitionFromView:toView: 来制作动画,但我也尝试过这种方法,但没有成功。 但是您是否真的按照我的建议尝试将UIViewAnimationTransitionFlipFromLeft 替换为UIViewAnimationOptionTransitionFlipFromLeft?我问是因为(a)我认为它会起作用,并且(b)它们解析为不同的数字。 UIViewAnimationTransitionFlipFromLeft 解析为 1 而 UIViewAnimationOptionTransitionFlipFromLeft 解析为 1 啊,你是对的。我没有注意到您原始评论中的区别-它们是不同的值,更改为 UIViewAnimationOptionTransitionFlipFromLeft 修复了它。 没问题。很高兴能帮上忙。 谢谢!您节省了我在此 =)"(&! 问题上花费的更多时间。正在搜索超过 2 小时的解决方案...我在阅读文档时应该更加小心。

以上是关于iOS:UIView 动画,没有动画发生的主要内容,如果未能解决你的问题,请参考以下文章

ios uiview封装动画(摘录)

ios之UIview动画

iOS开发UI篇—核心动画(UIView封装动画)

UIView 翻转动画没有动画

iOS学习笔记10-UIView动画

ios开发核心动画七:核心动画与UIView动画的区别