我一直在尝试绘制0.5pt宽度的线条时获得纯色,但是当值小于等于1.0时它变得不透明(参见图片)。
这是代码(Swift 4)
func DrawLine(from:CGPoint, to:CGPoint) {
let path = UIBezierPath()
path.move(to: from)
path.addLine(to: to)
let lineLayer = CAShapeLayer()
lineLayer.path = path.cgPath
lineLayer.lineWidth = linesWidth
lineLayer.strokeColor = linesColor.cgColor
lineLayer.isOpaque = false // trying to make it work line
lineLayer.opacity = 1 // trying to make it work line
lineLayer.shadowColor = UIColor.clear.cgColor // trying to make it work line
lineLayer.shadowOffset = .zero // trying to make it work line
lineLayer.shadowOpacity = 0 // trying to make it work line
self.layer.insertSublayer(lineLayer, at: 0)
}
谢谢。
答案 0 :(得分:2)
我在https://www.raywenderlich.com/411-core-graphics-tutorial-part-1-getting-started找到了答案(全部是因为Codo在第一个答案中解释了抗锯齿)
如果直线的尺寸奇怪,则需要将其定位 达到正负0.5点以防止抗锯齿
因此,如果lineWidth为1pt或更小,我将添加0.5点或(1 /比例)。
现在这条线很脆
答案 1 :(得分:1)
我认为当您说不透明时,您的意思是部分透明。而且我想我们在这里谈论的是macOS,对吧?
您如何看待少于1像素的线出现在屏幕上?像素是屏幕的最小单位。整个像素具有相同的颜色。它不能是部分红色和部分白色。
因此,作为 antialiasing 的一部分,macOS混合了细线和背景,即,它使像素在背景上绘制之前部分透明。效果是,即使它仍然是1像素宽,该行也会被视为较细。
如果您不喜欢这种效果,请不要绘制少于1个像素的线。但这是线条看起来比1像素细的唯一方法。
BTW:像素大小取决于分辨率。在视网膜设备上,1像素为0.5点,在非视网膜设备上,其为1点,并且两者之间甚至还有因素。