gpt4 book ai didi

swift - 找到两个 ImageView 重叠的重叠区域,并使该区域改变颜色

转载 作者:行者123 更新时间:2023-11-28 06:11:37 24 4
gpt4 key购买 nike

我希望能够将一个 ImageView 拖到另一个 ImageView 上,这样当它们重叠时,重叠区域会改变颜色。为了帮助可视化问题,这些 ImageView 是圆形的:当它们重叠时,应该形成维恩图样式的图像,如下所示。

enter image description here

我知道您可以使用以下方法检测交叉点是否发生:

if (self.imageview1.bounds.contains(self.imageview2.bounds)) {
...
}

但真的不知道如何为中间区域着色!

最佳答案

所以我想出了一种数学方法!基本上你使用基本的三角学来找到相交的两个“弧”所需的角度,并制作由这两个弧组成的贝塞尔路径。然后只需叠加贝塞尔路径就可以了!如果有人感兴趣,这是我的代码:)

注意:这假设两个圆具有相同的半径,并且我已将 ImageView 剪裁成圆形!

let circlePath = UIBezierPath()
let left_circle_center = left_image_view.center.x
let right_circle_center = right_image_view.center.x
let radius = left_image_view.frame.width/2
let angle = acos( (left_circle_center - right_circle_center)/radius)
intersection_Path.addArc(withCenter: right_circle_center, radius: radius, startAngle: CGFloat(Double.pi-angle), endAngle: CGFloat(Double.pi+angle), clockwise: true)
intersection_Path.addArc(withCenter: left_circle_center, radius: radius, startAngle: CGFloat(-angle), endAngle: CGFloat(angle), clockwise: true
let intersection_area = CAShapeLayer()
intersection_area.path = intersection_Path.cgPath
intersection_area.borderColor = ...
intersection_area.strokeColor = ...
intersection_area.fillColor = ...
self.view.layer.addSublayer(intersection_area)

关于swift - 找到两个 ImageView 重叠的重叠区域,并使该区域改变颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46361119/

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