UINavigationControllerDelegate方法,在iOS 8中使用导航控制器进行自定义转换

kalafun

我尝试在弹出或推送导航控制器时创建自定义过渡。我创建了一个符合UINavigationControllerDelegate的transitionManager类。我已经创建了这个transitionManager的对象,并将其作为transitioningDelegate添加到我的navigationController中。

推送动画运行得很好,但是当我尝试跳回到上一个viewController时,我只会看到黑屏。

我已经浏览了许多其他文章来使其工作并尝试了手头的一切,但是当我弹出时它仍然没有显示以前的ViewController。

这里的transitionManager的代码是:

import UIKit

class BRTransitionManager: NSObject, UINavigationControllerDelegate, UIViewControllerAnimatedTransitioning {

    private var presenting = true

    func navigationController(navigationController: UINavigationController, animationControllerForOperation operation: UINavigationControllerOperation, fromViewController fromVC: UIViewController, toViewController toVC: UIViewController) -> UIViewControllerAnimatedTransitioning? {

        if  operation == UINavigationControllerOperation.Push{
            self.presenting = true
        } else if operation == UINavigationControllerOperation.Pop{
            self.presenting = false
        }

        return self
    }

    func animateTransition(transitionContext: UIViewControllerContextTransitioning) {
        let container = transitionContext.containerView()
        let fromView = transitionContext.viewForKey(UITransitionContextFromViewKey)!
        let toView = transitionContext.viewForKey(UITransitionContextToViewKey)!

        // set up from 2D transforms that we'll use in the animation
        let offScreenRight = CGAffineTransformMakeTranslation(container.frame.width, 0)
        let offScreenLeft = CGAffineTransformMakeTranslation(-container.frame.width, 0)

        // prepare the toView for the animation
        if (self.presenting == true) {
            // add the both views to our view controller
            container.addSubview(toView)
            // container.addSubview(fromView)

            toView.transform = offScreenRight
        } else {
            toView.transform = offScreenLeft
        }

        let duration = self.transitionDuration(transitionContext)
        UIView.animateWithDuration(duration, delay: 0.0, usingSpringWithDamping: 0.5, initialSpringVelocity: 0.8, options: nil, animations: {

            if (self.presenting == true) {
                fromView.transform = offScreenLeft
            } else {
                fromView.transform = offScreenRight
            }

            toView.transform = CGAffineTransformIdentity

        }, completion: { finished in

            transitionContext.completeTransition(true)
        })
    }

    func transitionDuration(transitionContext: UIViewControllerContextTransitioning) -> NSTimeInterval {
        return 0.8
    }   
}
鲍勃·韦克菲尔德

UINavigationController维护对其委托的弱引用。如果没有强引用,则转换完成后,将释放UINavigationControllerDelegate对象。

您可以在情节提要编辑器中设置委托对象。通过将对象从面板中拖动到“第一响应者”和“退出”图标之间的“导航控制器”场景中,可以添加对象。将其类设置为您的委托对象的类。确保该模块是您当前的应用程序模块。然后将其从导航控制器图标拖动到对象图标,然后从弹出菜单中选择“代理”。

这似乎维护了对委托对象的强烈引用。然后,委托对象将可用于调用展开过渡。您不需要自己创建对象或设置委托引用。

我在Scott James Remnant的博客文章中发现了这种技术。

斯科特·詹姆斯残-自定义的iOS塞格斯,过渡和动画-的正确方法

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在ASP.NET MVC中的控制器中使用自定义方法

来自分类Dev

自定义UIView XIB中的iOS导航后退按钮(不带导航控制器)

来自分类Dev

iOS自定义视图或导航栏控制器

来自分类Dev

UIStoryboard中的iOS 8自定义选项卡栏控制器

来自分类Dev

在API控制器中调用自定义方法

来自分类Dev

在导航控制器中第二次单击后,ios自定义委托为null

来自分类Dev

自定义iOS导航控制器动画:这是错误的吗?

来自分类Dev

控制器方法上的自定义验证器

来自分类Dev

iOS 8如何在导航控制器中使用文档提供程序扩展?

来自分类Dev

iOS 7自定义UINavigationController动画因目标控制器中的mapView失败

来自分类Dev

iOS视图控制器中的文本字段自定义

来自分类Dev

iOS-以编程方式切换视图控制器中的自定义动画

来自分类Dev

从自定义类调用视图控制器方法

来自分类Dev

自定义控制器方法,路线和ERB

来自分类Dev

Rails - 如何将控制器中的自定义方法更改为常规方法?

来自分类Dev

调用对象并将其传递给控制器中的自定义方法

来自分类Dev

在ASP Web API控制器中创建自定义方法并检索其数据

来自分类Dev

调用对象并将其传递给控制器中的自定义方法

来自分类Dev

在Spring Boot中为自定义控制器方法启用HAL序列化

来自分类Dev

如何在控制器中调用$ resource自定义方法

来自分类Dev

如何在 Laravel 5.6 中向资源控制器添加自定义方法

来自分类Dev

如何从 .net core 2.1 mvc 中的控制器调用自定义身份注册方法

来自分类Dev

Symfony | 如何从控制器中的存储库访问自定义方法?

来自分类Dev

使用参数的link_to自定义控制器方法

来自分类Dev

如何在带有导航控制器的ios xcode4.5中使用SEGUE

来自分类Dev

如何在iOS 8 / Swift中构建自定义视图控制器的表示形式?变量初始化非常困难

来自分类Dev

从 IOS 中的自定义表视图控制器中的响应加载数据时出现异常错误

来自分类Dev

在iOS7上使用UINavigationControllerDelegate进行上下滑动过渡的有效实现

来自分类Dev

在iOS7上使用UINavigationControllerDelegate进行上下滑动过渡的有效实现

Related 相关文章

  1. 1

    如何在ASP.NET MVC中的控制器中使用自定义方法

  2. 2

    自定义UIView XIB中的iOS导航后退按钮(不带导航控制器)

  3. 3

    iOS自定义视图或导航栏控制器

  4. 4

    UIStoryboard中的iOS 8自定义选项卡栏控制器

  5. 5

    在API控制器中调用自定义方法

  6. 6

    在导航控制器中第二次单击后,ios自定义委托为null

  7. 7

    自定义iOS导航控制器动画:这是错误的吗?

  8. 8

    控制器方法上的自定义验证器

  9. 9

    iOS 8如何在导航控制器中使用文档提供程序扩展?

  10. 10

    iOS 7自定义UINavigationController动画因目标控制器中的mapView失败

  11. 11

    iOS视图控制器中的文本字段自定义

  12. 12

    iOS-以编程方式切换视图控制器中的自定义动画

  13. 13

    从自定义类调用视图控制器方法

  14. 14

    自定义控制器方法,路线和ERB

  15. 15

    Rails - 如何将控制器中的自定义方法更改为常规方法?

  16. 16

    调用对象并将其传递给控制器中的自定义方法

  17. 17

    在ASP Web API控制器中创建自定义方法并检索其数据

  18. 18

    调用对象并将其传递给控制器中的自定义方法

  19. 19

    在Spring Boot中为自定义控制器方法启用HAL序列化

  20. 20

    如何在控制器中调用$ resource自定义方法

  21. 21

    如何在 Laravel 5.6 中向资源控制器添加自定义方法

  22. 22

    如何从 .net core 2.1 mvc 中的控制器调用自定义身份注册方法

  23. 23

    Symfony | 如何从控制器中的存储库访问自定义方法?

  24. 24

    使用参数的link_to自定义控制器方法

  25. 25

    如何在带有导航控制器的ios xcode4.5中使用SEGUE

  26. 26

    如何在iOS 8 / Swift中构建自定义视图控制器的表示形式?变量初始化非常困难

  27. 27

    从 IOS 中的自定义表视图控制器中的响应加载数据时出现异常错误

  28. 28

    在iOS7上使用UINavigationControllerDelegate进行上下滑动过渡的有效实现

  29. 29

    在iOS7上使用UINavigationControllerDelegate进行上下滑动过渡的有效实现

热门标签

归档