4

ビューに枠付きのボックスを描画するためにCAShapeLayeraを使用しています。UIBezierPath

これは正常に動作していますが、最初のピクセル (上、左) が描画されていません。

これは私のコードです:

let focusSize = CGRect(x: focusX, y: focusY, width: focusWidth, height: focusHeight)
let focusPath = UIBezierPath(roundedRect: focusSize, cornerRadius: 0)

let borderLayer = CAShapeLayer()
borderLayer.path = focusPath.cgPath
borderLayer.fillColor = UIColor.clear.cgColor
borderLayer.strokeColor = UIColor.white.cgColor
borderLayer.lineWidth = 2
borderLayer.frame = self.someView.bounds
self.someView.layer.addSublayer(borderLayer)

結果 (左上隅のピクセルに注意してください):

奇妙なピクセル

これはアンチエイリアシングに関連している可能性があると思いましたが、x、y、borderWidth をいじっても問題は解決しないようです。誰がこれを引き起こしているのか知っていますか?

4

3 に答える 3

2

はい、ドキュメントによると、四角形である必要がありますが、lineWidthについては言及されていないと思います

これが、ピクセルが欠落している理由のようです

borderLayer.lineWidth = 2

幅を 1 に変更すると、ピクセルが欠落することなく完全な長方形が描画されます

lineWidth を 10 に変更すると、ギャップにかなりの違いが見られます

あなたの問題の解決策はこれを使用することです

borderLayer.lineCap = kCALineCapSquare

これらのlineCapLine Cap の値を確認してください

于 2017-03-10T14:01:22.913 に答える