0
Swift에서 나는 두 개의 반투명 동그라미를 가지고 있는데 둘 다 CAShapeLayer
입니다. 그들이 반투명이기 때문에, 그들 사이의 중복과 같이 표시됩니다 :CAShapeLayer를 CAShapeLayer의 마스크로 사용할 때 얇은 경계
는 대신, 시각적 함께 "병합"로합니다. 내가 시도한 해결책은 원 2를 원 1의 마스크로 사용하여 겹침을 없애는 것입니다.
이 솔루션은 일반적으로 노력하고 있습니다,하지만 난 원이 외부에 얇은 라인을 얻을 :
내 질문 : 나는 오른쪽 원에 얇은, 외부 회선 제거 할 수 방법 ? 왜 거기에 있니? (Xcode playground can be found here)를 다음과 같이
코드는 다음과 같습니다 모두 CAShapeLayers이 같은 알파 값이있는 경우
private let yPosition: CGFloat = 200
private let circle1Position: CGFloat = 30
private let circle2Position: CGFloat = 150
private let circleDiameter: CGFloat = 200
private var circleRadius: CGFloat { return self.circleDiameter/2.0 }
override func loadView() {
let view = UIView()
view.backgroundColor = .black
self.view = view
let circle1Path = UIBezierPath(
roundedRect: CGRect(
x: circle1Position,
y: yPosition,
width: circleDiameter,
height: circleDiameter),
cornerRadius: self.circleDiameter)
let circle2Path = UIBezierPath(
roundedRect: CGRect(
x: circle2Position,
y: yPosition,
width: circleDiameter,
height: circleDiameter),
cornerRadius: self.circleDiameter)
let circle1Layer = CAShapeLayer()
circle1Layer.path = circle1Path.cgPath
circle1Layer.fillColor = UIColor.white.withAlphaComponent(0.6).cgColor
let circle2Layer = CAShapeLayer()
circle2Layer.path = circle2Path.cgPath
circle2Layer.fillColor = UIColor.white.withAlphaComponent(0.6).cgColor
self.view.layer.addSublayer(circle1Layer)
self.view.layer.addSublayer(circle2Layer)
//Create a mask from the surrounding rectangle of circle1, and
//then cut out where it overlaps circle2
let maskPath = UIBezierPath(rect: CGRect(x: circle1Position, y: yPosition, width: circleDiameter, height: circleDiameter))
maskPath.append(circle2Path)
maskPath.usesEvenOddFillRule = true
maskPath.lineWidth = 0
let maskLayer = CAShapeLayer()
maskLayer.path = maskPath.cgPath
maskLayer.fillColor = UIColor.black.cgColor
maskLayer.fillRule = kCAFillRuleEvenOdd
circle1Layer.mask = maskLayer
}
가는 선은 거의 확실하게 앤티 엘리 어싱입니다. –
이 경우 앨리어싱을 제어하는 방법은 무엇입니까? – BlackWolf
이 질문에 직접 대답하지 않지만 두 원을 병합하는 대신 두 개의 호를 사용하여 위의 모양을 그릴 수 있습니다. – Sparky