尝试自定义动画时符合 UIViewControllerAnimatedTransitioning 协议时出错

Posted

技术标签:

【中文标题】尝试自定义动画时符合 UIViewControllerAnimatedTransitioning 协议时出错【英文标题】:Error in conforming with UIViewControllerAnimatedTransitioning protocol while trying Custom Animations 【发布时间】:2015-06-27 03:04:57 【问题描述】:

我一直在关注有关创建自定义动画的在线教程。因此,为了制作自定义动画,我创建了一个 NSObject 类型的类名 Transition Manager。我面临两个问题,

1) 所以当进一步定义类时,

class TransitionManager: NSObject, UIViewControllerAnimatedTransitioning, 
UIViewControllerTransitioningDelegate

    //Further Code

我得到一个编译时错误,

Type 'TransitionManager' does not conform to protocol 
'UIViewControllerAnimatedTransitioning'

Protocol requires function 'transitionDuration' with type 
'(UIViewControllerContextTransitioning) -> NSTimeInterval'

这里是'transitionDuration'函数:

// return how many seconds the transition animation will take
func transitionDuration(transitionContext: UIViewControllerContextTransitioning) -> NSTimeInterval

    return 0.5

2) 另一个编译时错误弹出,在以下行:

  // get the duration of the animation

    let duration = self.transitionDuration(transitionContext)

错误:

  'TransitionManager' does not have a member named 'transitionDuration'

这是完整的 TransitionManager.swift:http://pastebin.com/LkLym5Ci

【问题讨论】:

transitionDuration 在调用它的类之外,这就是为什么会发生“TransitionManager 没有名为 transitionDuration 的成员”的原因。将transitionDuration 放入 TransitionManager 类以修复此错误。 非常感谢@ericd!修复它! :) 酷!我正在写一个正确的答案,以便它可以帮助其他用户。 甜蜜。再次感谢! 【参考方案1】:

您的transitionDuration 方法当前在类之外,如PasteBin 中所示。

这就是为什么您会收到一条错误消息,指出 transitionDuration 不是该类的成员。

如果你将transitionDuration 方法放在 TransitionManager 类中,错误就会消失。

【讨论】:

以上是关于尝试自定义动画时符合 UIViewControllerAnimatedTransitioning 协议时出错的主要内容,如果未能解决你的问题,请参考以下文章

加载视图时导航栏跳跃

自定义 UIRefreshControl 动画

按下后退按钮时的自定义动画 - iOS

dismissViewControllerAnimated 自定义动画

自定义 UISearchController 动画

使用动画创建自定义视图