ios中使用SegmentedControl来切换视图
来源:互联网 发布:美国非农业就业数据 编辑:程序博客网 时间:2024/06/14 05:50
- 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! LeftViewController switchViewController(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的view from.removeFromParentViewController() // 移除from的ViewController } else { print("fromVC is nil") } if let to = toVC { self.addChildViewController(to) // 添加to的ViewController到父ViewController to.view.frame = CGRectMake(0, 0, containerView.frame.width, containerView.frame.height) // 计算视图大小 self.containerView.insertSubview(to.view, atIndex: 0) // 添加to的view到容器view to.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! LeftViewController switchViewController(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! RightViewController switchViewController(from: leftViewController, to: rightViewController) } else { print("storyboard is nil") } } } UIView.commitAnimations() }}
0 0
- ios中使用SegmentedControl来切换视图
- ios--SegmentedControl
- iOS视图切换-push视图与modal视图混合使用
- iOS segmentedControl 基本设置
- SegmentedControl 随点击 切换 屏幕, 屏幕滑动切换SegmentedControl
- ios中navigation相关的视图切换
- ios中多视图之间动画切换
- iOS Controller中视图切换动画效果
- iOS开发:使用ToolBar切换视图
- SegmentedControl
- iOS 切换视图
- ios视图切换效果
- [IOS]视图切换 MPFoldTransition
- [IOS视图切换]MPFlipViewController
- IOS 视图切换
- IOS 视图切换
- IOS视图切换
- IOS 视图切换
- 关于C++中的虚拟继承的一些总结
- 启动jenkins时,failed
- C++面向对象编程分享02----20160311_李楚煌
- 自定义View_PercentagerRing
- iOS之引用计数
- ios中使用SegmentedControl来切换视图
- varinish参考手册
- 二叉树的各种遍历
- wmi协议支持远程执行cmd命令,并返回获取命令相关信息
- 开源项目集锦(持续更新)...
- linux下动态链接库(.so)的显式调用和隐式调用
- 深度学习与计算机视觉(11)_基于deep learning的快速图像检索系统
- Genymotion常见问题
- 看完让你彻底搞懂Websocket原理