ios中使用SegmentedControl来切换视图
- From
- 效果图
- 设计图
- 结构与原理
- 视图结构
- 切换视图原理
- 代码
From
ios中使用SegmentedControl来切换视图
效果图
设计图
结构与原理
视图结构
共有3个ViewController
- A 父视图
- B 子视图
- 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来切换视图相关推荐
- iOS中单个控制器横屏切换的研究
在项目中遇到了一个问题,app中有两个控制器要求可以切换横屏,研究了半天,终于找到了解决办法. 在AppDelegate中写 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 1 ...
- iOS中的UIScrollView(滑动视图)
2019独角兽企业重金招聘Python工程师标准>>> UIScrollView 可以滑动的视图 #import "ViewController.h"@inte ...
- iOS开发8:使用Tool Bar切换视图
之前讨论的都是单视图应用程序,而在实际应用中,我们可能要多个视图,并根据用户的需要切换视图. iOS中几种典型的多视图程序: (1)Tab Bar Application:程序的底部有一排按钮,轻触其 ...
- 使用Tool Bar切换视图
之前讨论的都是单视图应用程序,而在实际应用中,我们可能要多个视图,并根据用户的需要切换视图. iOS中几种典型的多视图程序: (1)Tab Bar Application:程序的底部有一排按钮,轻触其 ...
- 在vue项目中 使用swiper轮播图的关于 在ios中图片白边闪屏踩坑记录
场景描述: 近日,接到一个需求,改善APP首页的布局,需要在顶部添加一个可滚动的栏目导航,以切换栏目然后切换栏目内容类似于唯品会目前的切换效果.如下图 问题描述: 在切换顶部栏目的时候,下面内容页的b ...
- iOS开发 剖析网易新闻标签栏视图切换(addChildViewController属性介绍)
iOS开发 剖析网易新闻标签栏视图切换(addChildViewController属性介绍) 本来仅仅是打算介绍一下addChildViewController这种方法的,正好今天朋友去换工作面试问 ...
- iOS 中横竖屏切换
iOS 中横竖屏切换的功能,在开发iOS app中总能遇到.以前看过几次,感觉简单,但是没有敲过代码实现,最近又碰到了,demo尝试了几种情况,这里就做下总结. 注意 横屏两种情况是反的你知道吗? U ...
- IOS APP 国际化 程序内切换语言实现 不重新启动系统(支持项目中stroyboard 、xib 混用。完美解决方案)
IOS APP 国际化 程序内切换语言实现 不重新启动系统(支持项目中stroyboard .xib 混用.完美解决方案) 参考文章: (1)IOS APP 国际化 程序内切换语言实现 不重新启动系统 ...
- IOS开发中UIBarButtonItem上按钮切换或隐藏实现案例
IOS开发中UIBarButtonItem上按钮切换或隐藏案例实现案例是本文要介绍的内容,这个代码例子的背景是:导航条右侧有个 edit button,左侧是 back button 和 add bu ...
最新文章
- 华为交换机配置DHCP服务器
- 特征值 模拟 第九届“图灵杯”NEUQ-ACM程序设计竞赛个人赛
- 贪心算法之——过河问题(nyoj47)
- Servlet获取URL地址
- 把一个数据库的数据插入到另外一个数据库
- 住个酒店,“我”的隐私就被强制扒干净了!
- oracle查询属主下对象,SQL优化
- 将WORD文档中整篇文章的自动编号消除,但原序号不变
- C言语教程第四章: 数组(4)
- BaaS、FaaS、Serverless都是什么馅儿?
- 进行CAD图纸文件查看时如何对其进行平移?
- linux进程线程同步之 - POSIX线程互斥锁
- 比特熊故事汇独家|英特尔“非典型性女博士”的大跨步人生
- 字典树模板及讲解 http://www.cnblogs.com/tanky_woo/archive/2010/09/24/1833717.html
- NextCloud安装及配置(docker-compose)
- VOC2012数据集xml文件转csv文件
- H5 可拖动、可点击进度条滑块
- 三 Ceph集群搭建
- 远程桌面连接时打不开计算机等,为什么远程连接连不上(远程桌面开启方法与无法连接解决办法)...
- 使用HCL模拟器配置VRRP相关项目