【问题标题】:UISegmented Control Animation / TranslationUI 分段控制动画/翻译
【发布时间】:2012-06-08 13:21:15
【问题描述】:

我试图在按下索引 0 时垂直翻译分段控件,以便 UITextView 可以出现在它的位置。我有 UITextView 工作的动画。

我尝试从this 其他stackoverflow 线程实现以下代码。随着 btnMyButton 被替换为 我的SegControl。

btnMyButton.frame = CGRectMake(oldx,oldy,width,height);
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationTransition:UIViewAnimationTransitionNone forView:btnMyButton];
[UIView setAnimationDuration:0.3];  
btnMyButton.frame = CGRectMake(newx, newy, width, height);
[UIView commitAnimations];

更改后, [UIView setAnimationTransition:UIViewAnimationTransitionNone forView:presentingComplaintSegCtrl];

给出以下警告: “语义问题 找不到类方法'+setAnimationTransition:forView:'(返回类型默认为'id')"

有没有更好的方法来解决这个问题?

注意:我正在 XIB 中创建分段控件。

谢谢

【问题讨论】:

    标签: objective-c ios ios5 uisegmentedcontrol uianimation


    【解决方案1】:

    正如警告所说,方法 '+setAnimationTransition:forView:' 在 UIView 中不存在。您正在寻找的方法是'+setAnimationTransition:forView:cache:'。但是,在文档中有一条注释说:

    不鼓励在 iOS 4.0 及更高版本中使用此方法。您应该改用transitionWithView:duration:options:animations:completion: 方法来执行转换。

    如果您不需要支持 iOS 3.x,我建议您按照 Apple 所说的去做,并为您的动画使用方法 'transitionWithView:duration:options:animations:completion:' :)

    [编辑]

    嘿@Ríomhaire,再次阅读您的问题...对于您的示例,最好在UIView 中使用animateWithDuration:animations: 方法。为要在块内设置动画的更改编写代码,并将其作为参数传递给此方法。如果您需要,这里有一些关于块的文档:http://developer.apple.com/library/ios/#featuredarticles/Short_Practical_Guide_Blocks/_index.html

    【讨论】:

    • 感谢您的快速回复。
    • 感谢 palpoms 和 @Justin-Paulson 的快速回复。我尝试同时使用两者,但我缺乏正确执行的理解。我也是stackoverflow的新手,所以请原谅任何不良的礼仪。如果您有时间,请给我看一个使用首选功能的 show 示例吗?如果没有,请不要担心,感谢您为我指明正确的方向。
    • 嗨 Ríomhaire,您是否阅读了文档中的示例?正在讨论方法transitionWithView:duration:options:animations:completion:
    • 是的,我做到了,不幸的是,因为我是 iOS 开发的新手,所以它超出了我的想象。我的转换代码在 UIScrollView 内,所以我不确定 UIScrollView 是容器视图还是其他什么?我想我了解 UIViewAnimationOptions,因为我之前已经成功使用过它。但是,我也不确定“动画完成:(void (^)(BOOL finished))completion”如何适合我上面提到的代码。我知道我在这里的深度不够,但我想我会从中学到很多东西。
    • 大家好,我得到了 +setAnimationTransition:forView:cache: 方法工作,结果我没有连接 mySegmentedControl 的 IBOutlet。所以这太棒了。谢谢。我现在将继续尝试首选方法。 :)
    【解决方案2】:

    您正在寻找+setAnimationTransition:forView:cache:

    来自 UIView 的参考:

    cache 如果是,则视图的前后图像将被渲染一次 并用于在动画中创建帧。缓存可以改善 性能,但如果将此参数设置为 YES,则不得更新 过渡期间的视图或其子视图。更新视图和 它的子视图可能会干扰缓存行为并导致 查看内容渲染不正确(或在错误的位置) 在动画期间。您必须等到过渡结束 更新视图。如果否,则必须更新视图及其内容 过渡动画的每一帧,这可能会明显影响 帧速率。

    所以添加cache:YEScache:NO

    或者,正如我输入时提到的那样,使用transitionWithView:...

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-13
      • 2014-10-03
      • 2013-08-14
      • 2011-09-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多