2017-09-22 6 views
1

オーバービュー領域が色を変えるように、あるイメージビューを別のイメージビューにドラッグできます。問題を視覚化するために、これらの画像ビューは円形です。オーバーラップすると、次のようにVennの図形式の画像が形成されます。2つのイメージビューのオーバーラップ領域が重複していることを確認し、この領域をカラーに変更します。

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

しかし、実際の間にエリアを着色する方法がわからない:

enter image description here

は、私はあなたが使用して交差点が発生したかどうかを検出することができます知っています!

+0

明確化の質問:「UIImageViews」になった2つの「UIViews」の交差点についてお話ししていますか?または、2つの 'UIImageViews'に含まれる' UIImages'の共通部分は? – dfd

+0

これは、画像ビューで任意の画像を扱うのが難しくなります(そして、それらの画像の背景色が白か透明か、既に適切なサイズに調整されているかどうかなど、多くの質問をします)。しかし、ベン図のサークルのような2つの規則的な形の交差点を探している場合、数学はかなり簡単です。 – Rob

+0

ImageViewsになったのは2つのUIViewでしたが、ジオメトリを使用して行う方法が見つかりました! – jasperthedog

答えて

1

私はこれを数学的に行う方法を考え出しました!基本的に三角法を使用して、交差点の2つの「円弧」に必要な角度を求め、これらの2つの円弧からなるベジェパスを作成します。次に、ベジェパスを重ねると、完了です!もし誰かが興味があれば私のコードです:

注:これは、両方の円が同じ半径を持つと仮定し、円形であるように私の画像ビューをクリップしました!

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) 
関連する問題