代码之家  ›  专栏  ›  技术社区  ›  jasperthedog

找到两个图像视图重叠的重叠区域,并使该区域变色

  •  1
  • jasperthedog  · 技术社区  · 7 年前

    enter image description here

    我知道您可以通过以下方式检测交叉口是否发生:

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

    但是真的不知道如何给中间的区域上色!

    1 回复  |  直到 7 年前
        1
  •  1
  •   jasperthedog    7 年前

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

    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)