swift 画虚线

摘要:
1.CAShapeLayer:适用于虚线的动态显示。通过控制添加虚线视图的ishidden来控制虚线的显示和隐藏///绘制虚线///-Parameters:///-lineView:添加虚线视图///-strokeColor:虚线颜色///-lineWidth:虚线宽度///-line长度:每个虚线段的长度///-leneSpacing:每个虚线的间隔privatefuncdrawDas

1. CAShapeLayer:适用于 动态显示 虚线, 通过控制添加虚线view的 ishidden 控制虚线的显示隐藏

swift 画虚线第1张

    ///绘制虚线
    ///- Parameters:
    ///- lineView: 添加虚线的view
    ///- strokeColor: 虚线颜色
    ///- lineWidth: 虚线宽度
    ///- lineLength: 每段虚线的长度
    ///- lineSpacing: 每段虚线的间隔
    privatefunc drawDashLine(lineView:UIView,
                              strokeColor: UIColor,
                              lineWidth: CGFloat = 0.5,
                              lineLength: Int = 4,
                              lineSpacing: Int = 4) {
        let shapeLayer =CAShapeLayer()
        shapeLayer.bounds =lineView.bounds
        shapeLayer.position = CGPoint(x: lineView.width/2, y: lineView.height/2)
        shapeLayer.fillColor =UIColor.blue.cgColor
        shapeLayer.strokeColor =strokeColor.cgColor
        
        shapeLayer.lineWidth =lineWidth
        shapeLayer.lineJoin =CAShapeLayerLineJoin.round
        shapeLayer.lineDashPhase = 0
        //每一段虚线长度 和 每两段虚线之间的间隔
        shapeLayer.lineDashPattern =[NSNumber(value: lineLength), NSNumber(value: lineSpacing)]
        
        let path =CGMutablePath()
///起点 path.move(to: CGPoint(x: lineView.width
/2, y: 0))
///终点
///横向 y = 0 //path.addLine(to: CGPoint(x: 0, y: 0)) ///纵向 Y = view 的height path.addLine(to: CGPoint(x: lineView.frame.width/2, y: lineView.frame.height)) shapeLayer.path =path lineView.layer.addSublayer(shapeLayer) }

2.UIGraphicsGetCurrentContext绘制 需要在draw 方法使用

    overridefunc draw(_ rect: CGRect) {
        super.draw(rect)
        guard let context = UIGraphicsGetCurrentContext() else{
            return}
        self.drawBgView(context: context, rect: rect)
        //设置左右半圆
        let radius: CGFloat = 6let centerY: CGFloat = rect.height - 49self.drawCircle(context: context, rect: rect, centerY: centerY, radius: radius)
        //设置水平方向半圆中心虚线
        let h_startPoint: CGPoint = CGPoint(x: radius + 8, y: centerY )
        let h_endPoint: CGPoint = CGPoint(x: rect.width - (radius + 8), y: centerY)
        self.drawDashLin(startPoint: h_startPoint, endPoint: h_endPoint, context: context)
        if isPriceView == false{
            ///优惠券与迎新券分割虚线
            let s_stasrtPoint: CGPoint = CGPoint(x: 16, y: 70)
            let s_endPoint: CGPoint = CGPoint(x: rect.width - 16, y: 70)
            self.drawDashLin(startPoint: s_stasrtPoint, endPoint: s_endPoint, context: context)
        }
    }
    privatefunc addShadow() {
        self.layer.shadowColor = UIColor(hexString: "000000").withAlphaComponent(0.1).cgColor
        self.layer.shadowOffset = CGSize( 0, height: 0)
        self.layer.shadowOpacity = 1self.layer.shadowRadius = 5}

    ///绘制阴影view
    privatefunc drawBgView(context: CGContext , rect: CGRect) {
        context.saveGState()
        //设置填充色
        UIColor.white.set()
        context.addPath(UIBezierPath(roundedRect: rect, cornerRadius: 10).cgPath)
        context.fillPath()
        context.restoreGState()
    }

    ///绘制左右半圆
    privatefunc drawCircle(context: CGContext , rect: CGRect , centerY: CGFloat , radius: CGFloat) {
        //1.设置圆心位置
        let leftCenter: CGPoint = CGPoint(x: 0, y: centerY)
        let rightCenter: CGPoint =CGPoint(x: rect.width, y: centerY)
        context.saveGState()
        //2.设置路径
        let leftPath = UIBezierPath(arcCenter: leftCenter, radius: radius, startAngle: -CGFloat.pi/2, endAngle: CGFloat.pi * 1.5, clockwise: true)
        let rightPath = UIBezierPath(arcCenter: rightCenter, radius: radius, startAngle: CGFloat.pi/2, endAngle: CGFloat.pi * 1.5, clockwise: true)
        context.setBlendMode(.clear)
        context.setLineWidth(1)
        context.addPath(leftPath.cgPath)
        context.addPath(rightPath.cgPath)
        context.fillPath()
        context.restoreGState()
    }

    ///绘制虚线
    privatefunc drawDashLin(startPoint: CGPoint , endPoint: CGPoint , context: CGContext) {
        context.saveGState()
        let path =CGMutablePath()
        path.move(to: startPoint)
        path.addLine(to: endPoint)
        context.addPath(path)
        context.setStrokeColor(UIColor(hexString: "CDCDCD").cgColor)
        context.setLineWidth(1)
        context.setLineDash(phase: 0, lengths: [3 , 3])
        context.strokePath()
        context.restoreGState()
    }

免责声明:文章转载自《swift 画虚线》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Docker进入主流,PaaS大有可为(转)DPDK 网络加速在 NFV 中的应用下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

spring相关的问题和原因分析

1、Bean的初始化顺序导致的项目启动失败 现象:shua-video项目中引用了配置中台bp-config的SDK,然后在mq消息监听类中使用。如上使用方式,在waterService中引用了bp-config。在测试环境mq中没有消息消费时项目能正常启动,但在线上有消息消费时项目启动报错,提示找不到bp-config类。 @Component @Slf...

*引使用.ashx文件处理IHttpHandler实现发送文本及二进制数据的方法。

最近在做我们单位的内部一个系统,使用了类似于Asp.Net 2.0里面的Theme(主题)的功能。此功能的核心是一个动态的CSS定义,根据用户选择的不同主题内容来发送不同的CSS样式文本。 本来这个问题很好解决,在HTML中的<head>区内使用一个: <%#=base.GetCssInclude()%> 就可以解决,不过我没有...

spring mvc 的jpa JpaRepository数据层 访问方式汇总

本文转载:http://perfy315.iteye.com/blog/1460226和http://jishiweili.iteye.com/blog/2088265 AppleFramework在数据访问控制层采用了Spring Data作为这一层的解决方案,下面就对Spring Data相关知识作一个较为详细的描述。1.Spring Data所解决的...

[ PyQt入门教程 ] Qt Designer工具的使用

Qt Designer是PyQt程序UI界面的实现工具,使用Qt Designer可以拖拽、点击完成GUI界面设计,并且设计完成的.ui程序可以转换成.py文件供python程序调用。本文主要通过用户登录需求描述Qt Designer工具开发界面的使用方法。 本文主要内容1、Qt Designer程序主界面窗口介绍。 2、Qt Designer程序实现界面...

Unity编辑器扩展

Unity引擎除了提供大部分通用的功能以外,还为开发者提供了编辑器的扩展开发接口,开发者可以编写编辑器脚本,打造适合自己的游戏辅助工具和定制的编辑器。 以前脚本开发中使用的一些API和组件类,都属于运行时类,Unity还提供了编辑器类用于编辑器的扩展开发,包括编辑器环境下使用的GUI类,编辑器工具类,编辑器操作类(例如拖放、撤销操作)等。 注意:编辑器扩展...

egg内置对象

http://eggjs.org/zh-cn/basics/objects.html 目录 egg内置对象 1.1 Application 1.2 Context 1.3 Request and Response 1.4 Helper(扩展) 1.5 Config 1.6 Logger egg内置对象 框架内置基础对象:从 Koa 继承而来的...