自定义滑条封装含有百分比例显示(swift版)
之前经常会用UIProgress的控件,但是有时候有的地方会要求你上面有个显示比例的地方,所以为了方便以后用到就自己封装了一个小的demo!(https://img-blog.csdn.net/20160412110730682)
你只需在ViewController中写下如下简单代码便可实现
var progress:ProVSpre
progress = ProVSpre(frame: CGRect(x: 0,y: 100,width: self.view.frame.size.width,height: 15))
self.view.addSubview(progress)
progress.linewidth = 4
progress.trackColor = UIColor.magentaColor()
progress.precent = 0.5
progress.backColor = UIColor.greenColor()
当然还有好多属性你也可以自己定义根据你的需求
如下是所有属性
class ProVSpre: UIView{
var widthLabel:Float = 60.0
//线的宽度
var linewidth:CGFloat = 5
// 跟踪的那个线的颜色
var trackColor:UIColor = UIColor.redColor()
//剩下的后背景的颜色
var backColor:UIColor = UIColor.whiteColor()
// 所增长的百分比例
var precent:Float = 0
// 划线的层
var drawlayer:CAShapeLayer!// 显示比例的label的控件
var presentlabel:UILabel!
// 设置label的背景颜色
var titleBackColor:UIColor = UIColor.whiteColor()
// border的颜色
var borderColor :UIColor = UIColor.blueColor()
// 字体的颜色
var fontColor:UIColor = UIColor.blackColor()
// 字体大小
var fontSize:Float = 12.0
}
//
// proVSpre.swift
// 滑条百分比例
//
// Created by Aimee on 4/11/16.
// Copyright © 2016 Aimee. All rights reserved.
//import UIKitclass ProVSpre: UIView {var widthLabel:Float = 60.0//线的宽度var linewidth:CGFloat = 5// 跟踪的那个线的颜色var trackColor:UIColor = UIColor.redColor()//剩下的后背景的颜色var backColor:UIColor = UIColor.whiteColor()// 所增长的百分比例var precent:Float = 0// 划线的层var drawlayer:CAShapeLayer!// 显示比例的label的控件var presentlabel:UILabel!// 设置label的背景颜色var titleBackColor:UIColor = UIColor.whiteColor()// border的颜色var borderColor :UIColor = UIColor.blueColor()// 字体的颜色var fontColor:UIColor = UIColor.blackColor()// 字体大小var fontSize:Float = 12.0override init(frame: CGRect) {precent = 0presentlabel = UILabel()super.init(frame: frame)}required init?(coder aDecoder: NSCoder) {fatalError("init(coder:) has not been implemented")}override func layoutSubviews() {var textnum = precent * 100.0// 拼接字符串presentlabel.text = String(format: "%.2f%%", textnum)let total:Float = Float(self.frame.size.width) - widthLabel//设置CSAShapelayer来进行设置划线的操作let path = UIBezierPath()path.moveToPoint(CGPoint(x: 0, y: linewidth/2))path.addLineToPoint(CGPoint(x: Int(self.frame.size.width), y: Int(linewidth/2)))drawlayer = CAShapeLayer()drawlayer.frame = CGRect(x: 0, y: self.frame.size.height/2-linewidth/2, width: self.frame.size.width, height: linewidth)drawlayer.path = path.CGPathdrawlayer.lineWidth = linewidthdrawlayer.strokeStart = 0drawlayer.strokeColor = trackColor.CGColordrawlayer.strokeEnd = 0drawlayer.fillColor = UIColor.blackColor().CGColordrawlayer.backgroundColor = backColor.CGColorself.layer.addSublayer(drawlayer)// 给划线layer添加的动画效果,其中的时间duration和下面的label的动画时间是一样的为了她们的运动的同时性let baseanimate = CABasicAnimation(keyPath: "strokeEnd")baseanimate.fromValue = NSNumber(float: 0)baseanimate.toValue = NSNumber(float: precent)baseanimate.fillMode = kCAFillModeForwardsbaseanimate.removedOnCompletion = falsebaseanimate.duration = CFTimeInterval(precent)drawlayer.addAnimation(baseanimate, forKey: nil)// 设置label 的一些属性if self.frame.size.height > 40 {presentlabel.frame = CGRect(x: 0, y: self.frame.size.height/2 - CGFloat(widthLabel/2), width: CGFloat(widthLabel), height: 40)}else{presentlabel.frame = CGRect(x: 0, y: 0, width: CGFloat(widthLabel), height: self.frame.size.height)}presentlabel.font = UIFont.systemFontOfSize(CGFloat(fontSize))presentlabel.textColor = fontColorpresentlabel.textAlignment = .Centerpresentlabel.layer.cornerRadius = presentlabel.frame.size.height/2;presentlabel.layer.masksToBounds = truepresentlabel.layer.borderColor = borderColor.CGColorpresentlabel.layer.borderWidth = 2presentlabel.backgroundColor = titleBackColorself.addSubview(presentlabel)// label跟随动的动画效果UIView.animateWithDuration(CFTimeInterval(precent), delay: 0, options: [], animations: {self.presentlabel.center.x = CGFloat(self.widthLabel/2 + total * self.precent)}, completion: nil)}// // Only override drawRect: if you perform custom drawing.
// // An empty implementation adversely affects performance during animation.
// override func drawRect(rect: CGRect) {
// // Drawing code
// }}
自定义滑条封装含有百分比例显示(swift版)相关推荐
- iOS多线程——Operation(自定义并发与非并发Operation)(Swift版)
目录 1. 前言 2. 主要属性及方法 3. Operation Dependencies(依赖) 4. 同步或异步方式 5. 并发与非并发 5.1 非并发Operation 5.2 并发Operat ...
- 一个常用的自定义弹框封装(适配 AndroidX),加载 ProgressDialog,状态显示的 StatusDialog 和自定义 Toast,全部支持背景颜色,圆角,边框和文字的自定义,构建者模
MNProgressHUD 项目地址:maning0303/MNProgressHUD 简介: 一个常用的自定义弹框封装(适配 AndroidX),加载 ProgressDialog,状态显示的 S ...
- 让自定义view宽高成比例显示
有时候我们自定义一个View,比如ImageView,我们需要让它宽高按照一定的比例显示,例如在ImageView在GridView中显示,GridView设置了3列,由于ImageVIew的宽度会根 ...
- Vue学习笔记:Vue中封装自定义步骤条 实现上下一步
Vue中封装自定义步骤条 实现上下一步 效果图: 如上图:在VUE中实现效果,VUE+Element,ant都有封装好的UI,直接引用就好了: 这里,觉得样式不符合UI设计,所以自定义封装了一个步骤条 ...
- iOS swift5 UISlider 自定义UISlider 修改滑块和滑条的大小
文章目录 UISlider添加事件,点击事件,滑动事件 1.滑动事件:滑动过程中一直触发的事件 2.点击事件:滑动完成,放开手才触发的事件 自定义UISlider 修改滑块和滑条的大小 UISlide ...
- Android进度条,自定义进度条,显示百分比
昨天搞了一个圆形加载框 传送门,睡了一晚重温一下,今天搞一个条形加载框巩固一下,比圆形要简单点,两个矩形即可,一个总的,一个加载进度的,然后添加一个文字在后面,先上图,后上代码,讲解在注释里直观又方便 ...
- android自定义进度条_Android中的自定义进度栏
android自定义进度条 Custom progress bar in android application gives it a personal touch. In this tutorial ...
- android进度条脚本,GEE引擎自定义进度条和自定义属性示例脚本..
GEE引擎自定义进度条和自定义属性示例脚本.. [@main] #SAY \\ 自定义装备进度条 \\ 自定义装备属性 \\ ;==================================== ...
- Android自定义控件:imageview重写onMeasure方法实现图片按指定比例显示,拉伸永不变形,解决屏幕适配问题
使用ImageView会遇到的问题 在Android应用中,都少不了图片的显示,ImageView,轮播图,ViewPager等等,很多都是来显示图片的,比如一个广告条的轮播效果,参看博客:广告条效果 ...
最新文章
- Activity在有Dialog时按Home键的生命周期
- 前方高能!AI 大牛 LeCun 设想下一个新前沿:摈弃深度学习的所有概率技巧,改而掌握不断转变的能量值...
- bootstrap4导航栏点击弹出表单_Bootstrap4从入门到精通
- Mysql错误: Lock wait timeout exceeded 解决办法
- Boost:双图bimap与Boost类型的测试程序
- OceanBase首次阐述战略:继续坚持自研开放之路 开源300万行核心代码
- word标题大纲级别_快速按标题层级把Word转Excel—附详细操作步骤
- 图解CentOS系统启动流程
- Android开发人员的10大抱怨
- phtread条件变量pthread_cond_t初始化方式
- webstorm怎样查找历史记录
- 数据分析sql面试必会6题经典_经典SQL面试题及答案分析
- 每日工作记录——任意小数分频研究
- MySQL从字符串提取数字
- 为了讨好大舅子,程序员竟当场学起了外挂???
- NHibernate 联合查询,解决方法-通过自动转换成DataTable
- java-net-php-python-jspm智守护学生健康管理系统软件设计与开发计算机毕业设计程序
- 层次分析法 你真的懂了吗?(完更)
- coreldraw插件编写
- 武汉大学计算机专业网络安全,武汉大学网络空间安全考研科目有哪些?