iOS 启用绘图的 UIView 圆角
iOS rounding UIView corners with draw enabled
当 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)
}
}
添加以下内容:
self.layer.masksToBounds = true
下一行:
self.layer.cornerRadius = self.frame.size.height / 2.0
顺便说一下,上面的评论描述了一些问题。
当 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)
}
}
添加以下内容:
self.layer.masksToBounds = true
下一行:
self.layer.cornerRadius = self.frame.size.height / 2.0
顺便说一下,上面的评论描述了一些问题。