iOS中默认的进度条是水平方向的进度条,这往往不能满足我们的需求。

可是我们能够自己定义类似的圆形的进度提示控件,主要使用iOS中的画图机制来实现。

这里我们要实现一个通过button点击然后圆形进度提示不断添加的效果。

(1)新建一个Cocoa Touch Class,注意要继承自UIView。

这个是绘制图形的类。绘制一个圆形的背景和扇形的进度。详细实现例如以下:

import UIKit

class ProgressControl: UIView {

    override init(frame: CGRect) {
super.init(frame: frame) self.backgroundColor = UIColor(white: 1, alpha: 0)//初始化画图背景为白色;
} required init(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
} private var _progressValue:CGFloat = 0//这个就是当前的进度; func getProgressValue()->CGFloat{ return _progressValue
} func setProgressvalue(value:CGFloat){//设置进度; _progressValue = value setNeedsDisplay()
} override func drawRect(rect: CGRect) {//绘制圆形背景和扇形进度。 var context = UIGraphicsGetCurrentContext() var r = rect.width/2 CGContextAddArc(context, r, r, r, 0, 3.1415926 * 2 , 0)
CGContextSetRGBFillColor(context, 0.5, 0.5, 0.5, 1)
CGContextFillPath(context) CGContextAddArc(context, r, r, r, 0, 3.1415926 * 2 * _progressValue, 0)
CGContextAddLineToPoint(context, r, r)
CGContextSetRGBFillColor(context, 0, 0, 1, 1)
CGContextFillPath(context) } }

(2)界面中拖入一个button,拖拽Action事件。

在ViewController中实现例如以下:

import UIKit

class ViewController: UIViewController {

    var progressControl:ProgressControl!

    override func viewDidLoad() {
super.viewDidLoad() progressControl = ProgressControl(frame:CGRect(x: 100, y: 100, width: 100, height: 100))
self.view.addSubview(progressControl) } //点击button。添加进度
@IBAction func addProgressValuePressed(sender: UIButton) { progressControl.setProgressvalue(progressControl.getProgressValue()+0.1) } override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
} }

(3)最后的实现效果例如以下:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">。

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">。

对于其它的触发事件,也能够使用这个自己定义圆形进度控件来进行提示。

github主页:https://github.com/chenyufeng1991  。欢迎大家訪问!

iOS项目开发实战——自己定义圆形进度提示控件的更多相关文章

  1. iOS项目开发实战——学会使用TableView列表控件(四)plist读取与Section显示

    文本将会实现把数据存储到plist文件里.然后在程序中进行读取.在TableView控件中依据不同的类别显示Section. 有关TableView 的其它实现,请參考<iOS项目开发实战--学 ...

  2. 聚合数据 iOS 项目开发实战:条码查询器

    记录下,聚合数据 iOS 项目开发实战:条码查询器:视频地址:http://www.jikexueyuan.com/course/324.html 条码查询API:https://www.juhe.c ...

  3. iOS项目开发实战——使用Xcode6设计自己定义控件与图形

    在iOS开发中,有很多控件都是Xcode默认提供的.使用这些控件是很方便的.可是因为某些须要.须要自己设计控件,那么应该怎么做呢?在Xcode6中提供了这种接口,同意开发人员高速开发自己定义控件,而且 ...

  4. iOS项目开发实战——学会使用TableView列表控件(二)

    要在iOS开发中使用TableView列表控件,不仅能够直接使用TableViewController作为整个主界面,并且还能够使用TableView控件来实现.使用TableView能够进行很多其它 ...

  5. iOS项目开发实战——使用CoreLocation获取当前位置信息

    随着基于位置服务LBS和移动互联网的兴起,你的位置是越来越重要的一个信息.位置服务已经是当前的热门应用如微信.陌陌等社交应用的杀手锏.而在iOS开发中,苹果已经给我们提供了一个位置接口.CoreLoc ...

  6. iOS项目开发实战——通过Http Get方式与server通信

    移动client往往须要同后台server进行通信,上传或者下载数据,最经常使用到的方式就是Http Get,如今我们来学习在iOS项目中使用Get方式同server进行通信. [一]server端实 ...

  7. iOS项目开发实战——iOS网络编程获取网页Html源码

    现在我们身处互联网的时代.不论什么一个软件或是App,都会或多或少与网络打交道,并不断发生数据交互.一个没有涉及网络编程的应用会显得比較low,这里我们将会開始使用Swift开发iOS应用,而且主要来 ...

  8. iOS开发笔记-根据frame大小动态调整fontSize的自适应文本及圆形进度条控件的实现

    最近同样是新App,设计稿里出现一种圆形进度条的设计,如下: 想了想,圆形进度条实现起来不难,但是其中显示百分比的文本确需要自适应,虽然可以使用时自己设定文本字体的大小,但是这样显得很麻烦,也很low ...

  9. iOS项目开发实战——plist数组解析

    plist数据是苹果公司创造的数据格式,基于XML,因为在iOS,Mac系统中操作plist很方便,所以我们经常会用到.在iOS项目中.系统会自己主动生成一个Info.plist文件,里面存放了iOS ...

随机推荐

  1. 关于Fragment的懒加载问题

    为了达到界面效果,我们有时需要使用到TabLayout+ViewPager的方式来布局界面,然而ViewPager的adapter总是默认把与当前可见的fragment相邻的两个fragment给加载 ...

  2. CosmosEngine - Unity3D /2D 轻量级游戏开发框架

    CosmosEngine https://github.com/mr-kelly/CosmosEngine 快速入门 简介 特性 约定 整体架构图 使用经验 工作流 未来功能 快速入门 1.将NGUI ...

  3. 安卓Eclipse开发人员的福音

    我们知道.谷歌已经放弃对Eclipse(ADT)的维护更新了.如今官网上也找不到ADT的下载链接了,我们大多数同学仍在使用的ADT版本号可能已经非常老了,预计大多数的SDK版本号仅仅到4.4,而,在尝 ...

  4. 【java】对数据库操作的那些事(包含数据库中的预处理)

    一.连接问题 前面刚介绍了怎么连接数据库,也写了对应的模板.可是它的可维护性很差.那么怎么解决问题呢? 首先写一个配置文件jdbc.properties <span style="fo ...

  5. js 判断是否是IE浏览器及ie版本

      方式一:只判断是否是ie浏览器 /** * 判断是否是IE浏览器,支持IE6-IE11 */ function isIE() { //ie? if (!!window.ActiveXObject ...

  6. Hibernate CRUD操作

    版权声明:本文为博主原创文章,如需转载请标注转载地址 博客地址:http://www.cnblogs.com/caoyc/p/5594789.html  对于Hibernate的增删改查,我们还是用一 ...

  7. Https与Http,SSL,DevOps, 静态代码分析工具,RFID, SSH, 非对称加密算法(使用最广泛的一种是RSA), 数字签名, 数字证书

    在URL前加https://前缀表明是用SSL加密的. 你的电脑与服务器之间收发的信息传输将更加安全. Web服务器启用SSL需要获得一个服务器证书并将该证书与要使用SSL的服务器绑定. http和h ...

  8. 通过设置标签class值控制标签的显示与隐藏

    需求背景如下: 原项目居民.单位.计量三模块共用一个jsp文件,显示的页面也顺理成章的统一了,幸亏没有调用同一个js,在此基础上要求居民和单位计量的分离,即居民的显示居民的相关信息,单位和计量的显示相 ...

  9. 大规模分布式数据处理平台Hadoop的介绍 一种可靠、高效、可伸缩的处理方案

    http://www.nowamagic.net/librarys/veda/detail/1767 Hadoop是什么 Hadoop原来是Apache Lucene下的一个子项目,它最初是从Nutc ...

  10. linux磁盘满时,如何定位并删除文件

    原文链接: http://www.cnblogs.com/yinxiangpei/articles/4211743.html @1.一般情况   一般情况下先df看一下,然后cd到要满的盘,执行: d ...