如何在 SWIFT 中绘制自定义圆角矩形?
How to draw a custom rounded rectangle in SWIFT?
我正在尝试以编程方式绘制上图所示的形状。
此形状有自定义圆角。
view.layer.cornerRadius = some value less than half diameter
这没有用。设置 cornerRadius 在每一侧绘制直线(如底部图像所示)但我尝试绘制的形状根本没有直线而且它不是椭圆形。
我也在下面尝试过,但没有成功。这段代码只是画了一个椭圆。
var path = UIBezierPath(ovalIn: CGRect(x: 000, y: 000, width: 000, height: 000))
我相信这不能通过设置 cornerRadius 来完成。
应该还有更多。
我不知道 class 我应该使用什么以及如何使用。
请任何人给我一些指导。
谢谢!
您必须将 cipsToBounds
添加到代码中以获取具有给定 cornerRadius 的图像。
尝试打击代码,
view.layer.cornerRadius = some value
view.clipsToBounds = true
您可以为自定义形状使用以下路径
let path = UIBezierPath(roundedRect: CGRect(x: 0, y: 0, width: 150, height: 150), byRoundingCorners: .allCorners, cornerRadii: CGSize(width: 8, height: 8))
您可以根据需要更改宽度和高度,UI
class RoundView: UIView {
var roundCorner: UIRectCorner? = nil
var roundRadius:CGFloat = 0
override init(frame: CGRect) {
super.init(frame: frame)
commonInit()
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
commonInit()
}
private func commonInit() {
Bundle.main.loadNibNamed(“nib name”, owner: self, options: nil))
addSubview(contentView)
contentView.frame = self.bounds
contentView.autoresizingMask = [.flexibleHeight, .flexibleWidth]
isUserInteractionEnabled = true
}
override func layoutSubviews() {
super.layoutSubviews()
if roundCorner != nil {
// self.roundCorners([.topRight, .bottomLeft, .bottomRight], radius: 15)
self.roundCorners(roundCorner!, radius: roundRadius)
}
}
}
我通过绘制二次方程完成了这个。
let dimention: CGFloat = some value
let path = UIBezierPath()
path.move(to: CGPoint(x: dimension/2, y: 0))
path.addQuadCurve(to: CGPoint(x: dimension, y: dimension/2),
controlPoint: CGPoint(x: dimension, y: 0))
path.addQuadCurve(to: CGPoint(x: dimension/2, y: dimension),
controlPoint: CGPoint(x: dimension, y: dimension))
path.addQuadCurve(to: CGPoint(x: 0, y: dimension/2),
controlPoint: CGPoint(x: 0, y: dimension))
path.addQuadCurve(to: CGPoint(x: dimension/2, y: 0),
controlPoint: CGPoint(x: 0, y: 0))
path.close()
let shapeLayer = CAShapeLayer()
shapeLayer.path = path.cgPath
shapeLayer.strokeColor = UIColor.blue.cgColor
shapeLayer.fillColor = UIColor.clear.cgColor
shapeLayer.lineWidth = 1.0
shapeLayer.position = CGPoint(x: 0, y: 0)
self.someView.layer.addSublayer(shapeLayer)
我正在尝试以编程方式绘制上图所示的形状。
此形状有自定义圆角。
view.layer.cornerRadius = some value less than half diameter
这没有用。设置 cornerRadius 在每一侧绘制直线(如底部图像所示)但我尝试绘制的形状根本没有直线而且它不是椭圆形。
我也在下面尝试过,但没有成功。这段代码只是画了一个椭圆。
var path = UIBezierPath(ovalIn: CGRect(x: 000, y: 000, width: 000, height: 000))
我相信这不能通过设置 cornerRadius 来完成。
应该还有更多。
我不知道 class 我应该使用什么以及如何使用。
请任何人给我一些指导。
谢谢!
您必须将 cipsToBounds
添加到代码中以获取具有给定 cornerRadius 的图像。
尝试打击代码,
view.layer.cornerRadius = some value
view.clipsToBounds = true
您可以为自定义形状使用以下路径
let path = UIBezierPath(roundedRect: CGRect(x: 0, y: 0, width: 150, height: 150), byRoundingCorners: .allCorners, cornerRadii: CGSize(width: 8, height: 8))
您可以根据需要更改宽度和高度,UI
class RoundView: UIView {
var roundCorner: UIRectCorner? = nil
var roundRadius:CGFloat = 0
override init(frame: CGRect) {
super.init(frame: frame)
commonInit()
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
commonInit()
}
private func commonInit() {
Bundle.main.loadNibNamed(“nib name”, owner: self, options: nil))
addSubview(contentView)
contentView.frame = self.bounds
contentView.autoresizingMask = [.flexibleHeight, .flexibleWidth]
isUserInteractionEnabled = true
}
override func layoutSubviews() {
super.layoutSubviews()
if roundCorner != nil {
// self.roundCorners([.topRight, .bottomLeft, .bottomRight], radius: 15)
self.roundCorners(roundCorner!, radius: roundRadius)
}
}
}
我通过绘制二次方程完成了这个。
let dimention: CGFloat = some value
let path = UIBezierPath()
path.move(to: CGPoint(x: dimension/2, y: 0))
path.addQuadCurve(to: CGPoint(x: dimension, y: dimension/2),
controlPoint: CGPoint(x: dimension, y: 0))
path.addQuadCurve(to: CGPoint(x: dimension/2, y: dimension),
controlPoint: CGPoint(x: dimension, y: dimension))
path.addQuadCurve(to: CGPoint(x: 0, y: dimension/2),
controlPoint: CGPoint(x: 0, y: dimension))
path.addQuadCurve(to: CGPoint(x: dimension/2, y: 0),
controlPoint: CGPoint(x: 0, y: 0))
path.close()
let shapeLayer = CAShapeLayer()
shapeLayer.path = path.cgPath
shapeLayer.strokeColor = UIColor.blue.cgColor
shapeLayer.fillColor = UIColor.clear.cgColor
shapeLayer.lineWidth = 1.0
shapeLayer.position = CGPoint(x: 0, y: 0)
self.someView.layer.addSublayer(shapeLayer)