草庐IT

swift - 带圆角的虚线

coder 2023-09-03 原文

<分区>

我正在尝试在这样的 View 周围绘制带圆角的虚线:

class DashedLineView: UIView {

    override func draw(_ rect: CGRect) {

        let path = UIBezierPath(roundedRect: rect, cornerRadius: 8)

        UIColor.clear.setFill()
        path.fill()

        UIColor.red.setStroke()
        path.lineWidth = 3

        let dashPattern : [CGFloat] = [3, 3]
        path.setLineDash(dashPattern, count: 2, phase: 0)
        path.stroke()
    }
}

结果是:

如您所见,边角存在问题,知道如何解决吗?

更新: 使用@Jon Rose answer DashedLineView 现在看起来像这样:

class DashedLineView: UIView {

    private let borderLayer = CAShapeLayer()

    override func awakeFromNib() {

        super.awakeFromNib()

        borderLayer.strokeColor = UIColor.red.cgColor
        borderLayer.lineDashPattern = [3,3]
        borderLayer.backgroundColor = UIColor.clear.cgColor
        borderLayer.fillColor = UIColor.clear.cgColor

        layer.addSublayer(borderLayer)
    }

    override func draw(_ rect: CGRect) {

        borderLayer.path = UIBezierPath(roundedRect: rect, cornerRadius: 8).cgPath
    }
}

有关swift - 带圆角的虚线的更多相关文章

  1. ruby-on-rails - 使用虚线路径 key 字符串访问 Ruby 哈希 - 2

    RailsI18n库将YAML文件转换为可通过使用t()函数的点分路径调用访问的数据结构。t('one.two.three.four')有谁知道如何使用Ruby哈希来做到这一点?还是只能通过YAML对象直接实现? 最佳答案 只是在路径中的一个点上拆分并遍历它以找到正确的散列?path.split(".").inject(hash){|hash,key|hash[key]}或者,您可以通过递归遍历整个结构来构建新的散列:defconvert_hash(hash,path="")hash.each_with_object({})do|(

  2. javascript - Chart.js:带部分虚线的折线图 - 2

    我正在尝试绘制折线图,​​该折线图应显示一条部分实线和部分虚线(以表示真实数据和预期数据)。我发现这个例子在2.0.0-alpha版本上完美运行varlineChartData={labels:['A','B','C','D','E','F','G'],datasets:[{label:"MyFirstdataset",data:[1,8,3,4,2,3,4],borderColor:'#66f',borderDash:[20,30],pointBackgroundColor:"transparent"},{label:"MyFirstdataset",data:[1,8,3,4,2,

  3. javascript - Html5 Canvas Bezier 上的虚线曲线 - 2

    对于我的一个应用程序,我需要在Html5Canvas中的贝塞尔曲线路径上绘制虚线曲线...破折号的长度和中间的间隙应该是可变的...它可以在JavaFx中实现,seethislink...我想使用Html5Canvas实现相同的效果。我知道如何绘制直线虚线,但不知道如何沿着贝塞尔曲线绘制曲线...虽然我不是专家,但我知道bezierdrawingalgorithm,我看到这个算法的问题是,它允许您使用范围从0到1的时间参数来识别贝塞尔曲线上的坐标...这还不够,因为要绘制虚线贝塞尔曲线,我需要在主要贝塞尔曲线路径上绘制许多具有指定长度参数和给定间隙距离的小贝塞尔曲线。JavaFx必须使

  4. javascript - three.js 线框只有形状,隐藏边缘为虚线 - 2

    我正在尝试在three.js中创建特定类型的3D对象。例如,我想要一个线框模式的立方体(因此只显示边缘)。但我希望后面的边缘被打破。插图:我不知道这对于three.js是否可行,或者我是否应该直接使用webgl尝试。我应该在线框图中使用THREE.Mesh还是使用THREE.Line和LineDashedMaterial或者两者叠加使用? 最佳答案 我成功了。您需要创建三个对象。第一个对象:实体3d对象(我指的是面而不是边缘)第二个对象:除虚线外的所有边缘第三个对象:所有边缘但正常(不是虚线)对于第一个对象,将Material设置为

  5. javascript - 使用 Rafael.js 绘制带虚线的矩形 - 2

    我正在使用Rafael.js在图像上绘制矩形。我设置描边颜色的问题是背景可能是深色或浅色或任何颜色。我认为处理这个问题的最好方法是使用虚线。然而这个电话circle=Canvas.paper.rect(left,topCoord,width,height).attr({stroke-dasharray:"---"});不起作用。Firebug(在FireFox20.0上)返回一条错误消息,指出我的.js文件中的现有函数不存在。stroke-dasharray似乎对矩形无效。 最佳答案 基本的JavaScript错误:{stroke-

  6. swift - 将 json 编码时间转换为 nsdate - 2

    当我将time.Now()编码到JSON对象时,它给出的结果为"2009-11-10T23:00:00Z"但打印时间。现在给出2009-11-1023:00:00+0000UTC。他们为什么不同。什么是T和Z。另外,如何根据this将其转换为swiftNSDate对象?表? 最佳答案 这些值的含义无关紧要,它们是该格式(ISO8601)的一部分。有几种方法可以解决这个问题。一种是为时间或您的结构定义自定义MarshalJSON()方法并使用它来格式化日期,另一种是首先在您的结构中将其表示为字符串,以便当默认实现执行你得到你正在寻找的

  7. objective-c - 为什么 Swift 函数定义语法是多余的? - 2

    在C/C++/Java/Go中,我们使用,来分隔参数:(aint,bint)在ObjectiveC中,我们使用:来表示参数::(int)a:(int)b在Swift中,我们必须同时使用:和,:(a:int,b:int)是否需要冗余? 最佳答案 Swift可能有外部和内部参数名称:(externalinternal:Int)如果没有独特的分隔符,会产生很多歧义。 关于objective-c-为什么Swift函数定义语法是多余的?,我们在StackOverflow上找到一个类似的问题:

  8. swift - Swift 和 Go 之间的 Zlib 压缩 - 2

    我的Swift应用程序与用Go编写的服务器通信。我希望使用Zlib压缩传输的数据,但压缩结果似乎与Swift和Go不同。这是Go版本:sourceString:="A-t-ellebesoind'autrespreuves?Acceptez-lapourleplaisir.J'aitantfaitquedelacueillir,Etc'estpresqueunefleur-des-veuves."//Compressionvarbbytes.Bufferwriter:=zlib.NewWriter(&b)writer.Write([]byte(sourceString))writer.

  9. ios - swift api SecKeyCreateEncryptedData 使用的额外认证数据是什么? - 2

    我正在使用rsaEncryptionOAEPSHA256AESGCM在iOS上使用SecKeyCreateEncryptedData加密一些数据,然后在golang后端解密相同的数据。我正在使用3072位rsa公钥来加密对称key。当我从iOS获取数据到后端时,我能够成功解密对称key,但gcm标签验证失败。我使用的是与iOS相同的16字节IV,但不知道iOS在加密时是否使用任何aad(附加身份验证数据)。有谁知道rsaEncryptionOAEPSHA256AESGCMforiOS是否使用了一些aad?这适用于iOS10+。我已经尝试过使用nil、空的16字节数组、aeskey本身、

  10. java - Android布局-设置圆角半径相对于屏幕尺寸 - 2

    我使用以下内容作为布局的背景:但是圆度在4"800x480屏幕上与在4.7"1280x720屏幕上看起来非常不同。有没有办法设置相对于屏幕的半径? 最佳答案 一个好问题,我不知道用XML做这个的巧妙方法(如果使用dip值不够),但是你可以以编程方式创建你的drawable并根据屏幕尺寸做一些数学运算来实现你想要的.//CreateadrawableGradientDrawableshape=newGradientDrawable();//GetthescreensizeDisplaydisplay=getWindowManager(

随机推荐