swift版的CircleView

简介:

swift版的CircleView

 

效果图


源码



//
//  CircleView.swift
//  CircleView
//
//  Created by YouXianMing on 15/10/7.
//  Copyright © 2015年 YouXianMing. All rights reserved.
//

import UIKit

class CircleView: UIView {
    
    // MARK: - 变量
    
    var lineWidth  : CGFloat        = 1
    var lineColor  : UIColor        = UIColor.blackColor()
    var clockWise  : Bool           = false
    var startAngle : CGFloat        = 0
    var duration   : NSTimeInterval = 0.2
    
    private var circleLayer : CAShapeLayer!
    
    // MARK: - Public Method
    
    /**
    构建view,让参数生效
    */
    func buildView() {
        
        let size   = bounds.size
        let point  = CGPoint(x: size.height / 2, y: size.width / 2)
        let radius = size.width / 2 - lineWidth / 2
        
        var tmpStartAngle : CGFloat = 0
        var tmpEndAngle   : CGFloat = 0
        
        if (clockWise == true) {
            
            tmpStartAngle = -radian(Double(180 - startAngle));
            tmpEndAngle   = radian(Double(180 + self.startAngle));
            
        } else {
            
            tmpStartAngle = radian(Double(180 - self.startAngle));
            tmpEndAngle   = -radian(Double(180 + self.startAngle));
        }
        
        let circlePath = UIBezierPath(arcCenter: point, radius: radius, startAngle: tmpStartAngle, endAngle: tmpEndAngle, clockwise: clockWise)
        
        circleLayer.path        = circlePath.CGPath
        circleLayer.strokeColor = lineColor.CGColor
        circleLayer.fillColor   = UIColor.clearColor().CGColor
        circleLayer.lineWidth   = lineWidth
        circleLayer.strokeEnd   = 0
    }
    
    /**
    绘制圆形百分比
    
    - parameter percent:  百分比
    - parameter animated: 是否开启动画
    */
    func changeToPercent(var percent : CGFloat, animated : Bool) {
        
        if (percent <= 0) {
            
            percent = 0;
            
        } else if (percent >= 1) {
            
            percent = 1;
        }
        
        if (animated) {
            
            let basicAnimation : CABasicAnimation! = CABasicAnimation()
            basicAnimation.keyPath                 = "strokeEnd"
            basicAnimation.duration                = (duration <= 0 ? 0.2 : duration)
            basicAnimation.fromValue               = circleLayer.strokeEnd
            basicAnimation.toValue                 = percent
            circleLayer.strokeEnd                  = percent
            circleLayer.addAnimation(basicAnimation, forKey: nil)
            
        } else {
            
            CATransaction.setDisableActions(true)
            circleLayer.strokeEnd = percent
            CATransaction.setDisableActions(false)
        }
    }
    
    // MARK: - System Method
    
    override init(frame: CGRect) {
        
        super.init(frame: frame)
        createCircleLayer()
    }
    
    required init?(coder aDecoder: NSCoder) {
        
        fatalError("init(coder:) has not been implemented")
    }
    
    // MARK: - Private Method
    
    private func radian(degrees : Double) -> CGFloat {
        
        return CGFloat((M_PI * degrees) / 180)
    }
    
    private func createCircleLayer() {
        
        circleLayer       = CAShapeLayer()
        circleLayer.frame = self.bounds
        self.layer.addSublayer(circleLayer)
    }
}



//
//  ViewController.swift
//  CircleView
//
//  Created by YouXianMing on 15/10/7.
//  Copyright © 2015年 YouXianMing. All rights reserved.
//

import UIKit

class ViewController: UIViewController {

    var eventTimer : NSTimer!
    var circleView : CircleView!
    
    override func viewDidLoad() {
        super.viewDidLoad()
     
        eventTimer = NSTimer.scheduledTimerWithTimeInterval(1, target: self, selector: "timerEvent", userInfo: nil, repeats: true)
        
        circleView            = CircleView(frame: CGRect(x: 0, y: 0, width: 100, height: 100))
        circleView.lineWidth  = 1
        circleView.lineColor  = UIColor.blackColor()
        circleView.duration   = 0.25
        circleView.clockWise  = true
        circleView.startAngle = 90
        circleView.center     = view.center
        circleView.buildView()
        
        view.addSubview(circleView)
    }
    
    func timerEvent() {
        
        circleView.changeToPercent(CGFloat(arc4random() % 101) / 100, animated: true)
    }
}

说明

参数查看并没有OC那么直白.

 




目录
相关文章
|
19天前
|
Swift iOS开发
Swift 方法
10月更文挑战第29天
16 4
|
6月前
|
安全 IDE Swift
Swift
Swift
83 0
|
6月前
|
存储 算法 安全
【Swift专题】聊聊Swift中的属性
属性是面向对象语言中非常基础的语法特性,我们讲属性,实际上就是讲与类本身或类实例关联的数据。在面向对象的语言中,类作为重要的数据结构会封装数据与函数,类中的函数我们通常称其为方法,而数据则就是属性。
100 1
|
Swift
swift中使用NSClassFromString
swift中使用NSClassFromString
329 0
|
存储 测试技术 Swift
Swift-RealmSwift 的使用
Swift-RealmSwift 的使用
768 0
Swift-RealmSwift 的使用
|
区块链 Swift
当我们在谈SWIFT时,到底在谈什么?
当我们在谈SWIFT时,到底在谈什么?
当我们在谈SWIFT时,到底在谈什么?
|
存储 Swift
Swift中类的使用
Swift中类的使用
122 0
|
Swift 数据安全/隐私保护
Swift 简单总结
1. swift简单总结(一)—— 数据简单值和类型转换2. swift简单总结(二)—— 简单值和控制流3. swift简单总结(三)—— 循环控制和函数4.
1292 0
|
iOS开发
Swift 2.3升级到Swift 3.0小记
> 阿里云App从Swift 2.1开始使用Swift,随时不断的推进,现在所有的业务代码都用Swift编写。由于Swift 3.0语法上有诸多改变,所以从Swift 2.3升级到Swift 3.0是一件宜早不宜迟的事情。元旦期间抽了点时间做这个升级。 ### 外部依赖 * 目前开源社区对Swift 3.0支持是非常好的,我们依赖的开源组件最新版本都支持Swift 3.0了,所以并没有
1758 0