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那么直白.

时间: 2024-12-28 15:02:22

swift版的CircleView的相关文章

iOS开发swift版异步加载网络图片(带缓存和缺省图片)

iOS开发之swift版异步加载网络图片 与SDWebImage异步加载网络图片的功能相似,只是代码比较简单,功能没有SD的完善与强大,支持缺省添加图片,支持本地缓存. 异步加载图片的核心代码如下:  func setZYHWebImage(url:NSString?, defaultImage:NSString?, isCache:Bool){         var ZYHImage:UIImage?         if url == nil {             return   

iOS开发——完整项目实战Swift篇&amp;百思不得姐Swift版总结(二)

百思不得姐Swift版总结(二) tabBar和NavBar配色方案 一.常规主题色使用点 应用在发布前都会对其主题色进行设置,以统一应用的风格(可能有多套主题).在主题色设置上有几个方面,如下: 1.TabBar部分,设置图片高亮.文本高度颜色 2.NavigationBar部分,设置导航栏颜色及字体颜色 3.应用标签等,设置字体的颜色 4.应用图片主题色 主题色的设置点,大体从上面四个方面着手,图片的主题色我们可通过图片更换的方式进行处理.而通过代码来处理的1-3条,有着不同的处理方法.大家

代码重构(二):类重构规则(Swift版)

在上篇博客<代码重构(一):函数重构规则(Swift版)>中,详细的介绍了函数的重构规则,其中主要包括:Extract Method, Inline Method, Inline Temp, Replace Temp with Query, Introduce Explaining Variable, Split Temporary Variable, Remove Assignments to Parameters, Replace Method with Method Object等.关于

IOS 实现3D Touch在tableView的简单应用(swift版)

之前记录过OC版实现3D Touch功能的小小演示,最近无事整整swift,也弄个swift版的3D Touoch... 上代码. 一.3D Touch重按主屏icon出现快捷标签有两种添加方式: 1.静态添加,在工程中的info.plist文件中添加,这种方式添加的标签安装后就能显示 2.动态添加,通过代码动态添加快速入口.这种方式添加的标签,必须先运行一次App才会出现. func application(application: UIApplication, didFinishLaunch

关东升的iOS实战系列图书 《iOS实战:入门与提高卷(Swift版)》已经上市

?? 承蒙广大读者的厚爱我的 <iOS实战:入门与提高卷(Swift版)>京东上市了,欢迎广大读者提出宝贵意见.http://item.jd.com/11766718.html 欢迎关注关东升新浪微博@tony_关东升. 关注智捷课堂微信公共平台,了解最新技术文章.图书.教程信息 更多精品iOS.Cocos.移动设计课程请关注智捷课堂官方网站:http://www.zhijieketang.com智捷课堂论坛网站:http://51work6.com/forum.php 版权声明:本文为博主原

Swift版iOS游戏框架Sprite Kit基础教程下册

Swift版iOS游戏框架Sprite Kit基础教程下册 试读下载地址:http://pan.baidu.com/s/1qWBdV0C 介绍:本教程是国内唯一的Swift版的Spritekit教程.本教程基于Xcode 6.1+iOS 8.1开发环境,采用Swift语言,详细讲解Sprite Kit游戏开发的各种知识,帮助读者尽快iOS游戏开发的技能. 目录 第7章  音频和视频 1 7.1  背景音乐 1 7.1.1  添加背景音乐 1 7.1.2  控制背景音乐 5 7.1.3  设置音乐

iOS游戏框架Sprite Kit基础教程——Swift版上册

iOS游戏框架Sprite Kit基础教程--Swift版上册 试读下载地址:http://pan.baidu.com/s/1qWBdV0C  介绍:本教程是国内唯一的Swift版的Spritekit教程.本教程基于Xcode 6.1+iOS 8.1开发环境,采用Swift语言,详细讲解Sprite Kit游戏开发的各种知识,帮助读者尽快iOS游戏开发的技能. 目录 目  录 第1章  编写第一个Sprite Kit程序 1 1.1  Sprite Kit介绍 1 1.1.1  什么是Sprit

关东升的iOS实战系列图书 《iOS实战:传感器卷(Swift版)》已经上市

?? 承蒙广大读者的厚爱我的 <iOS实战:传感器卷(Swift版)>京东上市了,欢迎广大读者提出宝贵意见.http://item.jd.com/11760248.html 欢迎关注关东升新浪微博@tony_关东升. 关注智捷课堂微信公共平台,了解最新技术文章.图书.教程信息 更多精品iOS.Cocos.移动设计课程请关注智捷课堂官方网站:http://www.zhijieketang.com智捷课堂论坛网站:http://51work6.com/forum.php 版权声明:本文为博主原创文

关东升的《iOS实战:图形图像、动画和多媒体卷(Swift版)》上市了

承蒙广大读者的厚爱我的<iOS实战:图形图像.动画和多媒体卷(Swift版)>京东上市了,欢迎广大读者提出宝贵意见..http://item.jd.com/11760249.html 欢迎关注关东升新浪微博@tony_关东升. 关注智捷课堂微信公共平台,了解最新技术文章.图书.教程信息 更多精品iOS.Cocos.移动设计课程请关注智捷课堂官方网站:http://www.zhijieketang.com智捷课堂论坛网站:http://51work6.com/forum.php