画像があり、三角形のように見えますが、その領域は長方形です。
この画像には 2 つのブロック (画像では 1 と 2 で示されています) があり、四角形全体が画像ビューです。
画像の最初の部分だけでタッチを検出したい。
この部分だけタッチを検出するにはどうすればいいですか?
画像があり、三角形のように見えますが、その領域は長方形です。
この画像には 2 つのブロック (画像では 1 と 2 で示されています) があり、四角形全体が画像ビューです。
画像の最初の部分だけでタッチを検出したい。
この部分だけタッチを検出するにはどうすればいいですか?
AUIView
は常にRectangular shapeです。これを変更することはできません。CALayer
ただし、マスキングを使用すると、必要な効果が得られる可能性があります。を作成し、UIView
それにカスタム マスクを適用します。これにより、マスクには三角形の適切なデータが含まれます。次に、実際に配置したコンテンツは、適切な「三角形」UIView
の領域にのみ表示されます。
マスク レイヤーを作成するには、画像(png など) を使用するか、Core Graphicsを使用して三角形を描画します。あなたができることがいくつかあります:
この Beautiful Linkからヘルプを得ることができます。
ここに例があります。
この SO Question: Learning Core Graphicsも参照してください。
この Apple's Documentationを確認できます。
お役に立てば幸いです。
H2CO3 が言ったように、UIView (または UIImageView) をサブクラス化し、touchesBegan:withEvent: などを実装できます。次に、タッチ ポイントが対象領域内にあるかどうかをテストします。特定の要件(画像の三角形の半分)の場合、テストは非常に簡単です。
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
CGPoint touchPoint = [[touches anyObject] locationInView:self];
if (touchPoint.x < touchPoint.y)
{
// touch in lower triangular half; handle touch however you like
}
}
UIImageView をサブクラス化する場合は、その userInteractionEnabled プロパティを YES に設定することを忘れないでください。
最初にこれUIImage
をUIViewController
クラスに追加し、次にこれにこのメソッドを追加します...
タグを次のUIImageView
ように設定します...
yourImageView.tag = 1;
次に、以下の方法を使用します。
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
UITouch *touch = [touches anyObject];
[touch locationInView:self.view];
if([touch.view isKindOfClass:[UIImageView class]])
{
UIImageView *tempImage=(UIImageView *) touch.view;
if (tempImage.tag == 1)
{
///Image clicked here, Do anything which you want here..your Image detect here...
NSLog(@"Image clicked here");
}
}
}
これがお役に立てば幸いです
タッチしたポイント ( ) から 90 度の三角形を作成する必要があります。point
次に、青い角度 (最初に下の画像を確認) が赤い角度よりも大きいか小さいかを計算する必要があります。そうであれば、ポイントは 2 の内側にあり、そうでない場合は 1 の内側にある
迅速な解決策:
func calculateIfPointIsInsideTriangle(point: CGPoint, triangle_h: Float, triangle_w: Float) -> Bool{
// print ("intrare w=\(triangle_w), h=\(triangle_h), x=\(point.x), y=\(point.y)")
let angle_triangle: Float = atan2f(triangle_h,triangle_w)
let angle_point: Float = atan2f(triangle_h - Float(point.y), triangle_w - Float( point.x))
if angle_point <= angle_triangle {
// print ("2")
return true
}
// print ("1")
return false
}
私の場合、三角形が反対側にあったので、私が間違っていないことを願っています。その場合は、使用する必要があります
let angle_point: Float = atan2f(triangle_h - Float(point.y), Float( point.x))
注意:iOS座標系は
(0,0) . . . (1,0)
.
.
.
(0,1) . . . (1,1)
そのため、計算には と をangle_point
使用する必要がありtriangle_h - Float(point.y)
ますtriangle_w - Float( point.x)
ソース:
https://www.raywenderlich.com/35866/trigonometry-for-game-programming-part-1
https://gamedev.stackexchange.com/questions/14602/what-are-atan-and-atan2-used-for-in-games