【问题标题】:iOS rounding UIView corners with draw enabled启用绘图的 iOS 圆角 UIView 角
【发布时间】:2016-11-09 10:47:39
【问题描述】:

draw 方法在下面的代码中被注释掉时,视图显示为圆形,但是当它被取消注释时,视图再次显示为矩形。我可以注释掉draw 的主体,让它只是一个空方法,但视图仍会显示为一个矩形。

我尝试将cornerRadius 行移至draw 的末尾、draw 的开头和drawInnerCircle 的末尾,但无济于事。我想知道是否还有办法在启用draw 方法的情况下使视图四舍五入?

import UIKit
class IconView: UIView {

    override init(frame:CGRect) {
        super.init(frame : frame)
        self.backgroundColor = UIColor(red: 47/255, green: 49/255, blue: 53/255, alpha: 1.0)
        self.layer.cornerRadius = self.frame.size.height / 2.0
    }
    required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
    }

    override func draw(_ rect: CGRect) {
        drawInnerCircle()
    }

    internal func drawInnerCircle() -> () {
        let halfSize:CGFloat = min( self.frame.size.width/2, bounds.size.height/2)
        let desiredLineWidth:CGFloat = 1    // your desired value
        let circlePath = UIBezierPath(
            arcCenter: CGPoint(x:halfSize,y:halfSize),
            radius: CGFloat( halfSize - 3 ),
            startAngle: CGFloat(0),
            endAngle:CGFloat(M_PI * 2),
            clockwise: true)

        let shapeLayer = CAShapeLayer()
        shapeLayer.path = circlePath.cgPath
        shapeLayer.fillColor = UIColor.clear.cgColor
        shapeLayer.strokeColor = UIColor(red: 96/255, green: 99/255, blue: 105/255, alpha: 1.0).cgColor
        shapeLayer.lineWidth = desiredLineWidth
        layer.addSublayer(shapeLayer)
    }
}

【问题讨论】:

  • 你也试过给shapeLayer 角吗?
  • shapeLayer 是一个内圈,所以它在技术上没有拐角
  • 亲爱的被难住了,目前你总是在视图中添加一个新层,当它被重绘时(这可能经常发生)。请删除旧图层或保留“旧”图层。

标签: ios swift uiview draw rounded-corners


【解决方案1】:

添加以下内容:

self.layer.masksToBounds = true

线下:

self.layer.cornerRadius = self.frame.size.height / 2.0

顺便说一下,上面的cmets描述了一些问题。

【讨论】:

    猜你喜欢
    • 2021-05-04
    • 2010-12-03
    • 2013-05-15
    • 1970-01-01
    • 2011-01-24
    • 2016-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多