【问题标题】:Draw a dotted line with full width in swift?快速画一条全宽的虚线?
【发布时间】:2020-03-18 10:23:04
【问题描述】:

我正在尝试以编程方式创建虚线。然而,这条线并没有一直穿过屏幕。

我一直在使用这个SO answer 来帮助我构建我的虚线。这是我得到的输出。

这是我的代码

extension UIView{
    func addDashedBorder() {
        //Create a CAShapeLayer
        let shapeLayer = CAShapeLayer()
        shapeLayer.strokeColor = UIColor.red.cgColor
        shapeLayer.lineWidth = 2
        // passing an array with the values [2,3] sets a dash pattern that alternates between a 2-user-space-unit-long painted segment and a 3-user-space-unit-long unpainted segment
        shapeLayer.lineDashPattern = [2,3]

        let path = CGMutablePath()
        path.addLines(between: [CGPoint(x: 0, y: 0),
                                CGPoint(x: self.frame.width, y: 0)])
        shapeLayer.path = path
        layer.addSublayer(shapeLayer)


    }
}

如何修复我的代码以使该行跨越整个屏幕?

【问题讨论】:

    标签: ios swift uiview core-animation


    【解决方案1】:

    CAShapeLayer框架

    extension UIView{
        func addDashedBorder() {
            //Create a CAShapeLayer
            let shapeLayer = CAShapeLayer()
            shapeLayer.frame = self.bounds
            shapeLayer.strokeColor = UIColor.red.cgColor
            shapeLayer.lineWidth = 2
            // passing an array with the values [2,3] sets a dash pattern that alternates between a 2-user-space-unit-long painted segment and a 3-user-space-unit-long unpainted segment
            shapeLayer.lineDashPattern = [2,3]
    
            let size = shapeLayer.frame.size
            let rightTop = CGPoint.zero
            let leftTop = CGPoint(x: size.width, y: 0)
            let leftBottom = CGPoint(x: size.width, y: size.height)
            let rightBottom = CGPoint(x: 0, y: size.height)
    
            let path = CGMutablePath()
            path.addLines(between: [rightTop, leftTop, rightBottom, rightTop])
            shapeLayer.path = path
            layer.addSublayer(shapeLayer)
    
    
        }
    }
    

    【讨论】:

      【解决方案2】:

      使用self.bounds.width 而不是self.frame.width

      来自UIView的文档:

      框架

      框架矩形,描述视图的位置和 superview 的坐标系中的大小。

      而:

      界限

      边界矩形,描述视图的位置和大小 自己的坐标系。

      【讨论】:

      • 不,即使我将框架更改为边界也显示相同的错误。
      • 那么我怀疑答案就在你的故事板中 - UIView 是否被限制填充安全区域,或者它恰好与故事板中的模拟设备大小相同? (因为它在不同尺寸的真实设备上显示时不会调整大小......)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-07-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-08
      • 2021-10-11
      • 2017-08-03
      相关资源
      最近更新 更多