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

原创 2016年08月30日 22:26:09

学习笔记之《精通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颜色设置

版权声明:本文为博主原创文章,然而你想怎么转就怎么转好了

iOS开发6-多视图应用

目标重点介绍多视图应用的结构和切换内容视图的基本知识,并开发一个多视图应用。...
  • y624418775
  • y624418775
  • 2015年10月12日 14:10
  • 613

跟我一起学Multiple View Geometry多视图几何(1)

本博客持续更新,与大家交流学习用,若读者发现有错误或者疑问请留言 前言:前几天博主买了本Multiple View Geometry第二版,一直在看这本书,不得不说之前网上查到的好多理论都是出自这本书...
  • fk1174
  • fk1174
  • 2016年07月02日 16:55
  • 6482

jdk8学习笔记

JDK8  全部特性: 1.允许在接口中有默认方法实现 2.Lambda表达式 3.函数式接口 4.方法和构造函数引用 5.Lambda的范围 6.内置函数式接口 7.Stream...
  • feng20092009
  • feng20092009
  • 2017年03月21日 14:52
  • 353

跟我一起学Multiple View Geometry多视图几何(4)

前言:今天我们主要学习从一些特殊相机运动中求解Fundamental matrices9.3 Fundamental matrices arising from special motions特殊运动...
  • fk1174
  • fk1174
  • 2016年07月03日 16:15
  • 2998

iOS多控制器-视图切换.

多控制器-视图切换.1.概述.在iOS开发中,视图的切换是很频繁的,常用的视图切换有三种: UITabBarController 以平行的方式管理视图,各个视图之间关系不大;每个加入的视图都会进行初...
  • CSDNhaoren13
  • CSDNhaoren13
  • 2016年03月05日 16:38
  • 2980

苹果的又一个坑:InHouse打包后程序不能启动

现象: Debug模式下,程序启动正常,功能也正常。但Archive打包后,LaunchScreen显示一下,程序闪退。工程为Swift项目,并且嵌入了一个Swift 库(Alamofire)。 查看...
  • kmyhy
  • kmyhy
  • 2015年02月13日 14:54
  • 7289

多视图几何——介绍(一)

Introduction – a Tour of Multiple View Geometry        本章是对主要思想的介绍,并对这些话题进行了非正式的处理。精确、明确的定义、缜密的代数以及对...
  • weixin_38074905
  • weixin_38074905
  • 2017年06月26日 14:06
  • 461

IOS-6-UI知识总结-1(代码添加控件、视图切换、多种传值方式)

UI知识总结-1(代码添加控件、视图切换、多种传值方式)
  • IOT_LI
  • IOT_LI
  • 2015年08月24日 17:45
  • 838

iOS开发 两个视图之间值传递的常用方法<五>

五、视图之间传值方法——单列思路:定义一个单列,里面包含了name 和old属性 这样在视图控制器1和视图控制器里面定义的这个单列对象都是一个对象,所以让视图控制器1的name和old属性等于这个单...
  • moxi_wang
  • moxi_wang
  • 2015年08月24日 11:39
  • 415

iOS UICollectionView学习之二,纯代码实现布局,纯代码实现添加Section Header头部视图和 Section Footer尾部视图

iOS UICollectionView学习之二,纯代码实现布局,纯代码实现添加头部视图跟尾部视图,Header和footer 1、首先看下整个Demo的整体结构:如下图 2、直接上代码 1....
  • ljh910329
  • ljh910329
  • 2015年01月05日 14:05
  • 13082
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:IOS学习笔记 - 多视图代码实现
举报原因:
原因补充:

(最多只允许输入30个字)