iOS项目开发实战——自己定义圆形进度提示控件

本文介绍如何在iOS中创建自定义圆形进度条控件。通过继承UIView并利用Core Graphics绘制圆形背景及扇形进度,结合按钮点击事件实现进度更新。提供完整代码示例。

       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)最后的实现效果例如以下:



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


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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值