IOS使用自带的API绘制一个加载进度的圆圈

本文介绍如何创建一个自定义的进度条控件,并通过Swift实现动态更新进度值的功能。该进度条采用扇形设计,支持外部修改进度值并实时显示。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

新建一个继承UIView类的文件progresscontrol

在这个progresscontrol文件中写入

    private var _progressValue:CGFloat = 0

    internal func getProgressValue()->CGFloat{
        return _progressValue
    }       //在外界获取它的值

    internal func setProgressValue(value:CGFloat){
        _progressValue = value

        setNeedsDisplay()       //重绘
    }       //在外界修改它的值

drawRect中的代码如下

override func drawRect(rect: CGRect) {

        // Drawing code

        var ctx = UIGraphicsGetCurrentContext()
        //正方形的控件Rect
        var r = rect.width/2       //坐标中心点

        //绘制背景颜色=================
        CGContextAddArc(ctx, r, r, r, 0, 3.1415926*2, 0)
        CGContextSetRGBFillColor(ctx, 0.7, 0.7, 0.7, 1)
        CGContextFillPath(ctx)
        //===========================

        //绘制扇形==============
        CGContextAddArc(ctx, r, r, r, 0, 3.1415926*2*_progressValue, 0)//弧形

        CGContextAddLineToPoint(ctx, r, r)//连线到中心点r,r

        CGContextSetRGBFillColor(ctx, 0, 1, 0, 1)   //填充色

        CGContextFillPath(ctx)//填充
        //===========================

    }

在故事版中添加一个按钮控件,按住control拖入viewcontroller文件中选择IBAction

private var pc : progresscontrol!  //全局定义pc,为progresscontrol类型

    //动态设置 每点击一次就加0.1
    @IBAction func addprogress(sender: AnyObject) {
        pc.setProgressValue(pc.getProgressValue()+0.1)
    }

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.

        pc = progresscontrol(frame:CGRect(x: 100, y: 100, width: 100, height: 100))

//        pc.setProgressValue(0.2)//设置值
        self.view.addSubview(pc) //添加到画面中
    }

运行之后是一个黑色的背景,接着回到progresscontrol文件中

    override init(frame: CGRect) {
        super.init(frame: frame)

        self.backgroundColor = UIColor(white: 1, alpha: 0)  //设置背景为白色全透明
    }

    required init(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }

把背景设置为白色全透明的,就完成了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值