ios中使用SegmentedControl来切换视图

来源:互联网 发布:美国非农业就业数据 编辑:程序博客网 时间:2024/06/14 05:50

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

From

ios中使用SegmentedControl来切换视图

效果图

run

设计图

run

结构与原理

视图结构

共有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! 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() // 移除fromview            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) // 添加toview到容器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
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 我孩子长得老慢怎么办 老公嫌你烦了怎么办 2岁宝宝吃饭不嚼怎么办 2岁宝宝挑食厌食怎么办 孩子不爱和家长交流怎么办 孩子发烧在医院查不出病因怎么办 宝宝乳牙长歪了怎么办 两岁宝宝不爱吃水果怎么办 两岁宝宝不吃水果怎么办 一岁的宝宝上火了怎么办 吃水果嘴唇肿了怎么办 二岁宝宝不爱吃饭怎么办 小婴儿便秘但不爱喝水怎么办 宝宝只吃水果不吃饭怎么办 一岁宝宝不喜欢吃水果怎么办 1岁宝宝不吃水果怎么办 一岁半宝宝吃水果拉肚子怎么办 大人发烧了怎么办如何退烧 怀孕后不爱吃水果怎么办 不敢吃水果了怕虫怎么办 宝宝发烧38度不出汗怎么办 1岁宝宝喜欢含饭怎么办 3岁宝宝喜欢含饭怎么办 孩子咳嗽发烧怎么办最有效 孩子咳嗽打哈切流鼻涕发烧怎么办 孩子香蕉吃多了怎么办 80多岁老人发烧怎么办 小孩香蕉吃多了怎么办 7个月宝宝缺钙怎么办 宝宝脖子被汗淹到红了脱皮怎么办? 小儿出汗多咳嗽怎么办吃什么 牛高烧不退怎么办最好 猪体温低不吃食怎么办 小孩发烧咳嗽怎么办吃什么药 大晚上发烧39度怎么办 胃受凉了老打嗝怎么办 大人发低烧怎么办如何退烧 吃了退热药不退热怎么办 猪持续高烧不退怎么办 猪感冒了不吃食怎么办 6岁儿童发烧38度怎么办