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

源码

//
// 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. ServiceComb 集成 Shiro 实践|火影专场发布

    Shiro简介 Apache Shiro是一款功能强大.易用的轻量级开源Java安全框架,它主要提供认证.鉴权.加密和会话管理等功能.Spring Security可能是业界用的最广泛的安全框架,但是 ...

  2. 调用新浪短地址转换api的一个测试

    import base64 import requests url="http://www.~~~~.com" headers={ "User-Agent":& ...

  3. python基础,if判断

    一.计算机基础知识: 1.计算机基本组成:主板+CPU+内存 (CPU:主频,核数(16)   内存:大小,型号,主频   显卡:显存,位宽) 2.计算机最低层:电子电路,只能识别0和1. 二.pyt ...

  4. 使用PHANTOMJS对网页截屏

    PhantomJS 是一个基于 WebKit 的服务器端 JavaScript API.它全面支持web而不需浏览器支持,其快速,原生支持各种Web标准: DOM 处理, CSS 选择器, JSON, ...

  5. PID<->Port[转]

    //Netstat -anb #include <Windows.h> #include "Psapi.h" #include <Iprtrmib.h> # ...

  6. JavaScript学习笔记 - 进阶篇(3)- 流程控制语句

    if语句 if语句是基于条件成立才执行相应代码时使用的语句. 语法: if(条件) { 条件成立时执行代码} 注意:if小写,大写字母(IF)会出错! 假设你应聘web前端技术开发岗位,如果你会HTM ...

  7. [Algo] 397. Right Shift By N Characters

    Right shift a given string by n characters. Assumptions The given string is not null. n >= 0. Exa ...

  8. spi设备描述过程

    一.spi通信 中控制器驱动及spi设备.spi设备驱动的关系入下图: 控制器驱动以及设备全志已经完成,在/driver/spi/spi--sunxi.c  中,打开源码文件可以看到spi控制器属于平 ...

  9. 跟踪路由(tracert)及ping命令

    由于最近学校网络不好,老是有问题,加上最近写了个数据展示系统,要部署到买的域名下,用到了这两个命令 首先,一台服务器,一台工作站,一个笔记本(我的,来测试ip是否通的) 服务器已经部署了三个网站(一个 ...

  10. 802.11X

    LSW1; interface Vlanif100 ip address 192.168.121.2 255.255.255.0连接云的地址 interface GigabitEthernet0/0/ ...