美文网首页
给UIView添加带圆角的完美虚线框

给UIView添加带圆角的完美虚线框

作者: 姬歌 | 来源:发表于2018-03-09 15:51 被阅读109次

    iOS autoLayout约束下,给UITableViewCell内部的UIView添加带圆角虚线框

    效果
    class Cell0: UITableViewCell {
    
        @IBOutlet weak var remark_view: UIView!  //remark_gray父视图
        @IBOutlet weak var remark_gray: UIView!  //remark_label灰色外框  
        @IBOutlet weak var remark_label: UILabel!
        var dashLayer: CAShapeLayer?  //虚线
        var remark: String? {
            didSet {
                remark_label.text = remark //赋值后通过约束 自动变化高度
                ...
                    //因为是autoLayout,渲染需要时间。如果不延时,无法获取渲染后的frame
                    //如果你用的是坐标实现布局(事先可计算出目标view的frame),就不必写延时,可自行直接计算frame。
                    DispatchQueue.main.asyncAfter(deadline: .now() + 0.1, execute: {
                        let dashBound = self.remark_gray.bounds
                        let path = UIBezierPath(roundedRect: dashBound, cornerRadius: 4.0)
                        self.dashLayer = CAShapeLayer()
                        self.dashLayer!.path = path.cgPath
                        self.dashLayer!.strokeColor = UIColor.red.cgColor
                        self.dashLayer?.fillColor = UIColor.clear.cgColor//如果不设置填充色,view内容将被黑色覆盖
                        //以path(理想化,宽度=0)为中心向两边扩展为宽度=2的路径。因为path是以remark_gray.bound为路径,所以line宽度一半在remark_gray(view)内部,一半在外部。
                        //又因为设置了remark_gray的clipToBounds=true进行剪切,所以实际绘制的虚线(dashLayer),宽度=2,但可见部分只有宽度=1。
                        self.dashLayer!.lineWidth = 2.0
                        self.dashLayer!.lineDashPattern = [4,2]//实线长度=4,空白长度2
                        
                        self.remark_gray.layer.addSublayer(self.dashLayer!)
                    })
                }
            }
        }
    }
    
    

    相关文章

      网友评论

          本文标题:给UIView添加带圆角的完美虚线框

          本文链接:https://www.haomeiwen.com/subject/euopfftx.html