先大概看下我们想实现简单的效果

源码

//
// DSegmentedControl.swift
// IOS学习之自定义UISegmentedControl
//
// Created by ding_qili on 16/9/12.
// Copyright © 2016年 ding_qili. All rights reserved.
// import UIKit @IBDesignable class DSegmentedControl: UIControl { /*
// Only override drawRect: if you perform custom drawing.
// An empty implementation adversely affects performance during animation.
override func drawRect(rect: CGRect) {
// Drawing code
}
*/
var titleColor:UIColor = UIColor.gray //选择状态
var titleColorDisable:UIColor = UIColor.darkGray //未选中状态
let slide = CALayer() //滑块 @IBInspectable var titles:[String]{ //标题
didSet{
guard titles.count > 0 else {
return
}
for title in 0..<titles.count {
let label = UIButton();
label.setTitle(titles[title], for: UIControlState());
label.setTitleColor(titleColor, for: UIControlState.disabled)
label.setTitleColor(titleColorDisable, for: UIControlState())
label.addTarget(self, action: #selector(changeValue), for: UIControlEvents.touchUpInside);
self.addSubview(label);
}
setNeedsLayout()
} } override func tintColorDidChange() {
super.tintColorDidChange() } var selecteIndex:Int = 0 {
didSet{
refrushSubView()
}
} override init(frame: CGRect) {
titles = []
super.init(frame: frame)
finishInit()
} requi 大专栏  自定义一个简单的SegmentedControlred init?(coder aDecoder: NSCoder) {
titles = []
super.init(coder: aDecoder)
finishInit()
} func changeValue(_ sender:UIView){
if let index = self.subviews.index(of: sender){
selecteIndex = index;
self.sendActions(for: UIControlEvents.valueChanged)
}
} func finishInit(){
titleColor = self.tintColor
slide.frame = CGRect(x: 0, y: 0, width: self.frame.width/2, height: 1)
slide.backgroundColor = titleColor.cgColor
self.layer.addSublayer(slide)
self.backgroundColor = UIColor.clear
} override func layoutSubviews() {
super.layoutSubviews()
refrushSubView()
} func refrushSubView(){
for item in self.subviews.enumerated() {
item.element.frame = CGRect(x: self.frame.width/CGFloat(titles.count) * CGFloat(item.offset), y: 0, width: self.frame.width/CGFloat(titles.count), height: self.frame.height)
if selecteIndex == item.offset{
var center = item.element.center;
center.y = self.frame.height;
slide.position = center;
}
if let uIControl = item.element as? UIControl {
uIControl.isEnabled = (selecteIndex != item.offset);
} }
} }
1. 选择继承UIControl,是想要通过UIControlEvents.valueChanged的方式来通知调用者切换状态
2. 默认是用了TintColor作为主色调来使用
3. `segment.titles = ["简介","评论"]` 就可以使用了
4. `segment.addTarget(self, action: #selector(segmentValueChange), for: UIControlEvents.valueChanged)` 回调选择切换
5. 代码比较简单,用于简单的学习

自定义一个简单的SegmentedControl的更多相关文章

  1. 自定义一个简单的JDBC连接池

    一.什么是JDBC连接池? 在传统的JDBC连接中,每次获得一个Connection连接都需要加载通过一些繁杂的代码去获取,例如以下代码: public static Connection getCo ...

  2. Struts—自定义一个简单的mystruct

    传统mvc开发总结: 1. 跳转代码写死,不灵活 2. 每次都去写servlet,web.xml中配置servlet! (配置目的: 请求, Servlet处理类) 一个简单的struct案例,描述如 ...

  3. 用C#自定义一个简单的集合

    闲来无聊来自己做了一个简单的'集合',用来加深自己对集合的理解 class listNode { private object value; public listNode(object _value ...

  4. 代码调试--自定义一个简单的debug函数

    function debug(){ $num_args = func_num_args(); //实参个数 $arg_list = func_get_args(); //返回某一个实参,必须是实参数组 ...

  5. 自定义一个简单的web框架

    from wsgiref.simple_server import make_server def book(request):     #视图函数 return [b'<h1> book ...

  6. [安卓] 18、一个简单的例子做自定义动画按钮和自定义Actionbar

    在做安卓UI的时候有时候需自定义具有动画效果的按钮或需要自定义一下actionbar~ 本节用一个简单的demo讲如何自定义具有动画效果的按钮,以及个性化的actionbar 下面是效果: 其中: △ ...

  7. ios开发UI篇—使用纯代码自定义UItableviewcell实现一个简单的微博界面布局

    本文转自 :http://www.cnblogs.com/wendingding/p/3761730.html ios开发UI篇—使用纯代码自定义UItableviewcell实现一个简单的微博界面布 ...

  8. iOS开发UI篇—使用xib自定义UItableviewcell实现一个简单的团购应用界面布局

    iOS开发UI篇—使用xib自定义UItableviewcell实现一个简单的团购应用界面布局 一.项目文件结构和plist文件 二.实现效果 三.代码示例 1.没有使用配套的类,而是直接使用xib文 ...

  9. 一个简单的jsp自定义标签

    学到了一个简单的jsp自定义标签,后面有更多的例子,会更新出来: 例子1: 步骤: 1.编写标签实现类: 继承javax.servlet.jsp.tagext.SimpleTagSupport; 重写 ...

随机推荐

  1. 吴裕雄--天生自然ShellX学习笔记:Shell 基本运算符

    Shell 和其他编程语言一样,支持多种运算符,包括: 算数运算符 关系运算符 布尔运算符 字符串运算符 文件测试运算符 原生bash不支持简单的数学运算,但是可以通过其他命令来实现,例如 awk 和 ...

  2. EL表达式获取属性值的原理

    EL表达式获取对象属性的原理是这样的:以表达式${user.name}为例EL表达式会根据name去User类里寻找这个name的get方法,此时会自动把name首字母大写并加上get前缀,一旦找到与 ...

  3. ACM-ICPC Asia Beijing Regional Contest 2018 Reproduction hihocoder1870~1879

    ACM-ICPC Asia Beijing Regional Contest 2018 Reproduction hihocoder1870~1879 A 签到,dfs 或者 floyd 都行. #i ...

  4. Acunetix WVS安全测试软件使用教程(入门级)

    1.下载 Acunetix WVS 10.5软件,下载地址为:https://pan.baidu.com/s/1Koku0Lhya5PgphMVL7w19g 密码:v438 2.压缩包中有破解说明,按 ...

  5. iOS 直接使用16进制颜色

    在做iOS开发时,一般我们会吸色,就是产品给的图我们一般会吸色,但是最近吸色时候,老大说有较大的颜色偏差,所以要求我们直接使用UI给出的额16进制颜色,你也可以搜索<RGB颜色值转换成十六进制颜 ...

  6. 使用spark

    更新说明 免密码登录 for f in `cat ~/machines`; do scp .ssh/id_dsa.pub $f:~/ ssh $f "cat id_dsa.pub >& ...

  7. shell的集合运算

    用cat,sort,uniq命令实现文件行的交集 .并集.补集 交集 $F_1 \cap F_2 $ cat f1 f2 | sort | uniq -d 并集 $F_1 \cup F_2 $ cat ...

  8. 系统学习Javaweb11----综合案例1

    学习内容: 1.综合案例-需求说明 2.综合案例-需求分析 3.综合案例-需求实现-网页顶部部分 4.案例-需求实现-网页导航条 5.综合案例-需求实现-网页主体部分 6.综合案例-需求实现-网页主体 ...

  9. PCoA|NMDS|STRESS|RDA |RA|Unimodal|CCA|Generalized Joint Attribute Modeling

    PCoA:主坐标轴分析 数值型变量使用各种距离公式,而分类变量看是否相同,比如, Aabbcc || Aaffff 其中,两个相同,4个不同,一组6个,则(6+6-2*2)=8. PC0A与PCA区别 ...

  10. NLP-文本分类之开始(0)

    转眼读研一年了,开题也开了,方向也定了,大方向就是NLP,然而从一开始的上课.做项目开题什么的(自己也比较贪玩,以前不打游戏,结果王者上瘾了),到现在对NLP是一知半解,不对,半解都没有半解,然后时间 ...