懒人改变世界

懒人的世界里,勤奋是必须的,因为懒,所以要更勤奋,说了你也不懂

IOS学习笔记 - 多视图代码实现

学习笔记之《精通IOS开发》第七版,第6章,多视图应用

声明:本人新手,此篇文章为学习笔记,无误导别人之意,且看切忘之

通过这章的学习,理解了多视图应用的底层实现

首先上代码:

import UIKit

class SwitchViewController: UIViewController {

    // 声明两个控制器
    private var blueViewController:BlueViewController!
    private var yellowViewController:YellowViewController!

    override func viewDidLoad() {
        super.viewDidLoad()

        // 获取blueViewController Blue和Yellow在storyboard中进行设置
        blueViewController = storyboard?.instantiateViewControllerWithIdentifier("Blue") as! BlueViewController
        blueViewController.view.frame = view.frame
        // 切换子控制器
        switchViewController(from:nil, to:blueViewController)
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // 当内存不足时,两个子控制器都是可以释放的
        if blueViewController != nil && blueViewController.view.superview != nil {
            blueViewController = nil
        }

        if yellowViewController != nil && yellowViewController.view.superview != nil {
            yellowViewController = nil
        }
    }


    // 底部工具栏按钮点击事件 有点模拟tab bar controller容器控制器
    @IBAction func swicthViews(sender:UIBarButtonItem){

        // 根据黄色控制器视图是否为当前控制器子视图判断要创建哪个子控制器
        if yellowViewController?.view.superview == nil  {
            if yellowViewController == nil {
                yellowViewController = storyboard?.instantiateViewControllerWithIdentifier("Yellow") as! YellowViewController
            }
        } else if blueViewController?.view.superview == nil {
            if blueViewController == nil {
                blueViewController = storyboard?.instantiateViewControllerWithIdentifier("Blue") as! BlueViewController
            }
        }

        // 这个是动画
        UIView.beginAnimations("View Flip", context: nil)
        UIView.setAnimationDuration(0.4)
        UIView.setAnimationCurve(.EaseInOut)

        // 选择要切换的控制器
        if blueViewController != nil && blueViewController?.view.superview != nil {
            UIView.setAnimationTransition(.FlipFromRight, forView: view, cache: true)
            yellowViewController?.view.frame = self.view.frame
            switchViewController(from: blueViewController, to: yellowViewController)
        } else {
            UIView.setAnimationTransition(.FlipFromLeft, forView: view, cache: true)
            blueViewController?.view.frame = self.view.frame
            switchViewController(from: yellowViewController, to: blueViewController)
        }
        UIView.commitAnimations()
    }

    // 切换控制器方法
    private func switchViewController(from fromVC:UIViewController?, to toVc:UIViewController?) {

        // 添加新的子视图控制器前,移除当前子控制器,前提是有
        if fromVC != nil {
            fromVC!.willMoveToParentViewController(nil)
            fromVC!.view.removeFromSuperview()
            fromVC!.removeFromParentViewController()
        }

        // 添加子控制器和子视图
        if toVc != nil {
            self.addChildViewController(toVc!)
            self.view.insertSubview(toVc!.view, atIndex: 0)
            toVc!.didMoveToParentViewController(self)
        }
    }
}

图:控制id的设置
这里写图片描述

另外两个控制器没特殊的设置,就是改了一下storyboard中的background颜色设置

阅读更多
版权声明:本文为博主原创文章,然而你想怎么转就怎么转好了 https://blog.csdn.net/sbt0198/article/details/52373724
文章标签: ios ios开发
个人分类: IOS
想对作者说点什么? 我来说一句

左侧菜单侧滑效果

2015年08月21日 29KB 下载

iOS侧滑菜单

2015年10月13日 61KB 下载

iOS侧滑菜单2

2015年10月13日 62KB 下载

没有更多推荐了,返回首页

不良信息举报

IOS学习笔记 - 多视图代码实现

最多只允许输入30个字

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭