gpt4 book ai didi

ios - CGContext绘制两个相邻的菱形产生了很细的间隙,如何减少它?

转载 作者:行者123 更新时间:2023-12-03 00:53:54 24 4
gpt4 key购买 nike

两个相邻的矩形如下图所示。

override func draw(_ rect: CGRect) {
// Drawing code
let leftTop = CGPoint(x:50,y:50)
let rightTop = CGPoint(x:150,y:100)

let leftMiddle = CGPoint(x:50,y:300)
let rightMiddle = CGPoint(x:150,y:300)

let leftDown = CGPoint(x:50,y:600)
let rightDown = CGPoint(x:150,y:650)

let context = UIGraphicsGetCurrentContext()
context?.addLines(between: [leftTop,rightTop,rightMiddle,leftMiddle])
UIColor.black.setFill()
context?.fillPath()

context?.addLines(between: [leftMiddle,rightMiddle,rightDown,leftDown])
context?.fillPath()


let leftTop1 = CGPoint(x:200,y:50)
let rightTop1 = CGPoint(x:300,y:100)

let leftMiddle1 = CGPoint(x:200,y:300)
let rightMiddle1 = CGPoint(x:300,y:350)

let leftDown1 = CGPoint(x:200,y:600)
let rightDown1 = CGPoint(x:300,y:650)

context?.addLines(between: [leftTop1,rightTop1,rightMiddle1,leftMiddle1])
UIColor.black.setFill()
context?.fillPath()

context?.addLines(between: [leftMiddle1,rightMiddle1,rightDown1,leftDown1])
context?.fillPath()
}

您可能需要放大才能看到间隙。如果我画一条细线来覆盖间隙,那么如果颜色具有 Alpha channel ,则任何宽度都可能重叠。

enter image description here

将 shapeColor 更改为 let shapeColor = UIColor(white: 0.0, alpha: 0.5) 并添加 context?.setShouldAntialias(false) let shapeColor = UIColor(white: 0.0, alpha: 0.5)

最佳答案

即使我使用 setShouldAntialias(true) 或者尝试在上下文上调用StrokePath(),我使用 CGContext 也会得到相同的结果。但它与 sublayersCGPathlinesColor

配合得很好
class RhombView: UIView {
let shapeColor: UIColor = .black

override init(frame: CGRect) {
super.init(frame: frame)
self.setupView()
}

required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
self.setupView()
}

func setupView() {
let leftTop1 = CGPoint(x:200.0,y:50.0)
let rightTop1 = CGPoint(x:300.0,y:100.0)

let leftMiddle1 = CGPoint(x:200.0,y:300.0)
let rightMiddle1 = CGPoint(x:300.0,y:350.0)

let leftDown1 = CGPoint(x:200.0,y:600.0)
let rightDown1 = CGPoint(x:300.0,y:650.0)

var path = UIBezierPath()

path.move(to: leftTop1)
path.addLine(to: rightTop1)
path.addLine(to: rightMiddle1)
path.addLine(to: leftMiddle1)
path.close()

let subLayer1 = CAShapeLayer()
subLayer1.path = path.cgPath
subLayer1.frame = self.layer.frame
subLayer1.fillColor = shapeColor.cgColor
subLayer1.strokeColor = shapeColor.cgColor
self.layer.addSublayer(subLayer1)

path = UIBezierPath()

path.move(to: leftMiddle1)
path.addLine(to: rightMiddle1)
path.addLine(to: rightDown1)
path.addLine(to: leftDown1)
path.close()

let subLayer2 = CAShapeLayer()
subLayer2.path = path.cgPath
subLayer2.frame = self.layer.frame
subLayer2.fillColor = shapeColor.cgColor
subLayer2.strokeColor = shapeColor.cgColor
self.layer.addSublayer(subLayer2)

self.layer.backgroundColor = UIColor.white.cgColor
}
}

如果您删除两个 subLayer.linesColor,您将看到间隙。

关于ios - CGContext绘制两个相邻的菱形产生了很细的间隙,如何减少它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58093969/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com