• From
  • 效果图
  • 设计图
  • 结构与原理
    • 视图结构
    • 切换视图原理
  • 代码

From

ios中使用SegmentedControl来切换视图

效果图

设计图

结构与原理

视图结构

共有3个ViewController

  1. A 父视图
  2. B 子视图
  3. C 子视图

切换视图原理

A包含上下两个部分,

上面就是SegmentedControl, 来控制视图切换

下面的部分用来展示B, C子视图.

点击SegmentedControl时候通过addView和removeView来实现视图切换.

另外, 为了好看, 加了翻页的动画效果.

代码

注释比较多了, 应该一看就明白.

import UIKitclass SegmentViewController: UIViewController {/// 容器view@IBOutlet weak var containerView: UIView!var leftViewController: LeftViewController!var rightViewController: RightViewController!override func viewDidLoad() {super.viewDidLoad()// Do any additional setup after loading the view, typically from a nib.if let sb = storyboard {leftViewController = sb.instantiateViewControllerWithIdentifier("leftViewController") as! LeftViewControllerswitchViewController(from: nil, to: leftViewController)} else {print("storyboard is nil")}}func switchViewController(from fromVC: UIViewController?, to toVC: UIViewController?) {if let from = fromVC {from.willMoveToParentViewController(nil) // 通知from即将从父ViewController移除from.view.removeFromSuperview() // 移除from的viewfrom.removeFromParentViewController() // 移除from的ViewController} else {print("fromVC is nil")}if let to = toVC {self.addChildViewController(to) // 添加to的ViewController到父ViewControllerto.view.frame = CGRectMake(0, 0, containerView.frame.width, containerView.frame.height) // 计算视图大小self.containerView.insertSubview(to.view, atIndex: 0) // 添加to的view到容器viewto.didMoveToParentViewController(self) // 通知to已经添加到父ViewController} else {print("toVC is nil")}}override func didReceiveMemoryWarning() {super.didReceiveMemoryWarning()// Dispose of any resources that can be recreated.removeViewController()}/**当收到内存警告时候, 移除不必要的ViewController*/func removeViewController() {if let leftVC = leftViewController {if let _ = leftVC.parentViewController {print("leftVC is using")} else {print("set leftVC = nil")leftViewController = nil}}if let rightVC = rightViewController {if let _ = rightVC.parentViewController {print("rightVC is using")} else {print("set rightVC = nil")rightViewController = nil}}}@IBAction func onSegmentValueChanged(sender: UISegmentedControl) {UIView.beginAnimations("xxx", context: nil)UIView.setAnimationDuration(0.4)UIView.setAnimationCurve(.EaseInOut)switch sender.selectedSegmentIndex {case 0:UIView.setAnimationTransition(.FlipFromRight, forView: self.containerView, cache: true)if let leftVC = leftViewController {switchViewController(from: rightViewController, to: leftVC)} else {if let sb = storyboard {leftViewController = sb.instantiateViewControllerWithIdentifier("leftViewController") as! LeftViewControllerswitchViewController(from: rightViewController, to: leftViewController)} else {print("storyboard is nil")}}default:UIView.setAnimationTransition(.FlipFromLeft, forView: self.containerView, cache: true)if let rightVC = rightViewController {switchViewController(from: leftViewController, to: rightVC)} else {if let sb = storyboard {rightViewController = sb.instantiateViewControllerWithIdentifier("rightViewController") as! RightViewControllerswitchViewController(from: leftViewController, to: rightViewController)} else {print("storyboard is nil")}}}UIView.commitAnimations()}
}

ios中使用SegmentedControl来切换视图相关推荐

  1. iOS中单个控制器横屏切换的研究

    在项目中遇到了一个问题,app中有两个控制器要求可以切换横屏,研究了半天,终于找到了解决办法. 在AppDelegate中写 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 1 ...

  2. iOS中的UIScrollView(滑动视图)

    2019独角兽企业重金招聘Python工程师标准>>> UIScrollView  可以滑动的视图 #import "ViewController.h"@inte ...

  3. iOS开发8:使用Tool Bar切换视图

    之前讨论的都是单视图应用程序,而在实际应用中,我们可能要多个视图,并根据用户的需要切换视图. iOS中几种典型的多视图程序: (1)Tab Bar Application:程序的底部有一排按钮,轻触其 ...

  4. 使用Tool Bar切换视图

    之前讨论的都是单视图应用程序,而在实际应用中,我们可能要多个视图,并根据用户的需要切换视图. iOS中几种典型的多视图程序: (1)Tab Bar Application:程序的底部有一排按钮,轻触其 ...

  5. 在vue项目中 使用swiper轮播图的关于 在ios中图片白边闪屏踩坑记录

    场景描述: 近日,接到一个需求,改善APP首页的布局,需要在顶部添加一个可滚动的栏目导航,以切换栏目然后切换栏目内容类似于唯品会目前的切换效果.如下图 问题描述: 在切换顶部栏目的时候,下面内容页的b ...

  6. iOS开发 剖析网易新闻标签栏视图切换(addChildViewController属性介绍)

    iOS开发 剖析网易新闻标签栏视图切换(addChildViewController属性介绍) 本来仅仅是打算介绍一下addChildViewController这种方法的,正好今天朋友去换工作面试问 ...

  7. iOS 中横竖屏切换

    iOS 中横竖屏切换的功能,在开发iOS app中总能遇到.以前看过几次,感觉简单,但是没有敲过代码实现,最近又碰到了,demo尝试了几种情况,这里就做下总结. 注意 横屏两种情况是反的你知道吗? U ...

  8. IOS APP 国际化 程序内切换语言实现 不重新启动系统(支持项目中stroyboard 、xib 混用。完美解决方案)

    IOS APP 国际化 程序内切换语言实现 不重新启动系统(支持项目中stroyboard .xib 混用.完美解决方案) 参考文章: (1)IOS APP 国际化 程序内切换语言实现 不重新启动系统 ...

  9. IOS开发中UIBarButtonItem上按钮切换或隐藏实现案例

    IOS开发中UIBarButtonItem上按钮切换或隐藏案例实现案例是本文要介绍的内容,这个代码例子的背景是:导航条右侧有个 edit button,左侧是 back button 和 add bu ...

最新文章

  1. 华为交换机配置DHCP服务器
  2. 特征值 模拟 第九届“图灵杯”NEUQ-ACM程序设计竞赛个人赛
  3. 贪心算法之——过河问题(nyoj47)
  4. Servlet获取URL地址
  5. 把一个数据库的数据插入到另外一个数据库
  6. 住个酒店,“我”的隐私就被强制扒干净了!
  7. oracle查询属主下对象,SQL优化
  8. 将WORD文档中整篇文章的自动编号消除,但原序号不变
  9. C言语教程第四章: 数组(4)
  10. BaaS、FaaS、Serverless都是什么馅儿?
  11. 进行CAD图纸文件查看时如何对其进行平移?
  12. linux进程线程同步之 - POSIX线程互斥锁
  13. 比特熊故事汇独家|英特尔“非典型性女博士”的大跨步人生
  14. 字典树模板及讲解 http://www.cnblogs.com/tanky_woo/archive/2010/09/24/1833717.html
  15. NextCloud安装及配置(docker-compose)
  16. VOC2012数据集xml文件转csv文件
  17. H5 可拖动、可点击进度条滑块
  18. 三 Ceph集群搭建
  19. 远程桌面连接时打不开计算机等,为什么远程连接连不上(远程桌面开启方法与无法连接解决办法)...
  20. 使用HCL模拟器配置VRRP相关项目

热门文章

  1. Soul赴美递交上市申请背后:自造定位、自我打脸,借“约会”营销
  2. Python笔记之nonlocal语句
  3. 28 令人印象深刻的亮色系网站设计灵感
  4. Apache的安装与配置
  5. iOS Core Animation Advanced Techniques(七):高效绘图、图像IO以及图层性能
  6. 详细解析黑马微信小程序视频--【思维导图知识范围】
  7. MySQL中Explain用法详解
  8. 大型WEB网站架构深入分析
  9. IndexOutOf下标越界几种解决方案
  10. lwIP中的snmp