zoukankan      html  css  js  c++  java
  • 自定义进度条

    用 CAShapeLayer 可以根据传入的的贝塞尔曲线UIBezierPath *path , 创建出需要的进度条形状。然后只要 实时的设置CAShapeLayer的strokeEnd属性,就可以更新进度条的进度。

    部分代码:

    /** 进度条 和 背景 */
    - (CAShapeLayer *)createLayer:(UIColor *)strokeColor path:(UIBezierPath *)path {
        CAShapeLayer *layer = [CAShapeLayer layer];
        layer.lineWidth = 5;
        layer.fillColor = [UIColor clearColor].CGColor;
        layer.strokeColor = strokeColor.CGColor;
        layer.path= path.CGPath;
        [self.layer addSublayer:layer];
        return layer;
    }
    
    /** 设置进度 描边停止 */
    - (void)setProgress:(CGFloat)progress {
        _progress = progress;
        
        self.progressLabel.text = [NSString stringWithFormat:@"%.0f%%",progress *100];
        self.progressLayer.strokeEnd = _progress;
    }
    
    /** 创建贝塞尔曲线 */
    - (UIBezierPath *)createPathWith:(CGRect)frame {
        
        UIBezierPath *path = [UIBezierPath bezierPath];
        
        switch (self.style) {
            case CusProgressViewStyleNone:{
                path = [UIBezierPath bezierPathWithArcCenter:CGPointMake(frame.size.width / 2.0, frame.size.height / 2.0) radius:CGRectGetWidth(frame)/ 2.0 startAngle:-M_PI_2 endAngle:M_PI_2 * 3 clockwise:YES];
            }
                break;
            case CusProgressViewStyleRectSegment: {
                CGFloat minAngle = 2 * M_PI / self.gridCount;
                for (int i = 0; i < self.gridCount; i++) {
                    
                    CGFloat startAngle = i * minAngle;
                    CGFloat endAngle = (i+ 2/3.0) * minAngle;
                    
                    UIBezierPath *path1 = [UIBezierPath bezierPathWithArcCenter:CGPointMake(frame.size.width / 2.0, frame.size.height / 2.0) radius:CGRectGetWidth(frame)/ 2.0 startAngle:-M_PI_2 + startAngle endAngle:-M_PI_2 + endAngle clockwise:YES];
                    [path appendPath:path1];
                }
            }
                break;
            case CusProgressViewStyleRoundSegment: {
                self.backgroundLayer.lineCap = kCALineCapRound;
                self.backgroundLayer.lineJoin = kCALineJoinRound;
                self.progressLayer.lineCap = kCALineCapRound;
                self.progressLayer.lineJoin = kCALineJoinRound;
                
                static CGFloat minAngle = 1;
                for (int i = 0; i < ceil(360 / (minAngle + self.gridInterval)); i++) {
                    
                    CGFloat startAngle = i * (minAngle+self.gridInterval) * M_PI / 180.0;
                    CGFloat endAngle = startAngle + minAngle * M_PI / 180.0;
                    if (endAngle >= 2 * M_PI) {
                        endAngle = 2 * M_PI;
                    }
                    
                    UIBezierPath *path2 = [UIBezierPath bezierPathWithArcCenter:CGPointMake(frame.size.width / 2.0, frame.size.height / 2.0) radius:CGRectGetWidth(frame)/ 2.0 startAngle:-M_PI_2 + startAngle endAngle:-M_PI_2 + endAngle clockwise:YES];
                    [path appendPath:path2];
                }
            }
                break;
            default:
                break;
        }
        
        return path;
    }

    练习代码:http://pan.baidu.com/s/1mhxGEuc

  • 相关阅读:
    Tomcat系统架构分析
    org.apache.catalina.util.DefaultAnnotationProcessor cannot be cast to org.apache.AnnotationProcessor
    Tomcat服务器的Web安全的解决方法
    在Tomcat中实现基本的HTTP方式的验证
    在Tomcat中采用基于表单的安全验证
    Tomcat对Struts中的Action进行授权利
    在 Tomcat 上配置虚拟主机
    在Tomcat中配置单点登录
    在Tomcat中配置连接池和数据源
    Tomcat常用操作
  • 原文地址:https://www.cnblogs.com/CyanStone/p/5092508.html
Copyright © 2011-2022 走看看