zoukankan      html  css  js  c++  java
  • xamarin.ios 实现圆形进度条

    using System;
    using UIKit;
    using System.Drawing;
    using CoreAnimation;
    
    namespace PMM
    {
        public class ProgressCircleView : UIView
        {
            protected CAShapeLayer _progressCircle;
            protected CAShapeLayer PageGrayCircle;
            public override CoreGraphics.CGRect Bounds {
                get 
                {
                    return base.Bounds;
                }
                set {
                    base.Bounds = value;
                    GrayCircle ();
                }
            }
    
            public ProgressCircleView ()
            {
                GrayCircle ();
            }
    
            /// <summary>
            /// Redraws the progress circle. If the circle is already on the screen, it removes that one and creates a new one using the 
            /// current properties of the view
            /// </summary>
            void RedrawCircle ()
            {
                
                var centerPoint = new PointF ((float)this.Bounds.Width , (float)this.Bounds.Height );
                UIBezierPath circlePath = UIBezierPath.FromArc (centerPoint, this.Bounds.Width * .5f, (float)(-.5 * Math.PI), (float)(1.5 * Math.PI), true);
    
                _progressCircle = new CAShapeLayer ();
    
                _progressCircle.Path = circlePath.CGPath;
                _progressCircle.StrokeColor = UIColor.Red.CGColor;
                _progressCircle.FillColor = UIColor.Clear.CGColor;
                _progressCircle.LineWidth = 5f;
                _progressCircle.LineCap = CAShapeLayer.CapRound;
                _progressCircle.StrokeStart = 0f;
                _progressCircle.StrokeEnd = 0f;
                this.Layer.AddSublayer (_progressCircle);
    
    
            }
            void GrayCircle()
            {
                if (_progressCircle != null && _progressCircle.SuperLayer != null) {
                    _progressCircle.RemoveFromSuperLayer ();
                }
                var centerPoint = new PointF ((float)this.Bounds.Width , (float)this.Bounds.Height );
                UIBezierPath circlePath = UIBezierPath.FromArc (centerPoint, this.Bounds.Width * .5f, (float)(1.5 * Math.PI), (float)(-.5 * Math.PI), false);
    
                PageGrayCircle = new CAShapeLayer ();
    
                PageGrayCircle.Path = circlePath.CGPath;
                PageGrayCircle.StrokeColor = UIColor.Gray.CGColor;
                PageGrayCircle.FillColor = UIColor.Clear.CGColor;
                PageGrayCircle.LineWidth = 4f;
                PageGrayCircle.LineCap = CAShapeLayer.CapRound;
                PageGrayCircle.StrokeStart = 0f;
                PageGrayCircle.StrokeEnd = 0f;
                this.Layer.AddSublayer (PageGrayCircle);
                RedrawCircle ();
            }
    
            /// <summary>
            /// Updates the progress circle.
            /// </summary>
            /// <param name="progressPercent">The percentage of the progress. Should be a value between 0.0 and 1.0</param>
            public void UpdateProgress(float progressPercent) {
                _progressCircle.StrokeEnd = progressPercent;
                PageGrayCircle.StrokeEnd = 1 - progressPercent;
            }
        }
    }
  • 相关阅读:
    关于Python3.7和Python3.6中元组类型数据内存存储问题
    PHP中的语法特点小结
    PHP中的魔术常量
    Python02期(北京)课程笔记索引
    初识python
    Django项目功能执行逻辑流程图之用户页面信息展示和添加
    Django中的Model模型
    浅谈web开发以及django的安装和入门
    对前面知识的重新理解
    8月26号
  • 原文地址:https://www.cnblogs.com/qinhe/p/5255829.html
Copyright © 2011-2022 走看看