gpt4 book ai didi

ios - 使用 CAShapeLayer 作为 CAShapeLayer 蒙版时的细边框

转载 作者:行者123 更新时间:2023-11-30 12:09:43 24 4
gpt4 key购买 nike

在 Swift 中,我有两个半透明圆圈,它们都是 CAShapeLayer。由于它们是半透明的,因此它们之间的任何重叠都变得可见,如下所示:

enter image description here

相反,我希望它们在视觉上“合并”在一起。我尝试过的解决方案是使用圆 2 作为圆 1 的 mask ,从而切除重叠部分。

此解决方案通常有效,但我在圆 2 的外侧看到一条细线:

enter image description here

我的问题:如何去掉右圆上的细外线?为什么它还在那里?

<小时/>

代码如下(Xcode playground can be found here):

    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
}

最佳答案

如果两个 CAShapeLayer 具有相同的 alpha 值,您可以将它们放置在新的父 CALayer 中,然后设置父级的 alpha。

关于ios - 使用 CAShapeLayer 作为 CAShapeLayer 蒙版时的细边框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46227172/

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