1

画像があり、三角形のように見えますが、その領域は長方形です。 ここに画像の説明を入力

この画像には 2 つのブロック (画像では 1 と 2 で示されています) があり、四角形全体が画像ビューです。

画像の最初の部分だけでタッチを検出したい。

この部分だけタッチを検出するにはどうすればいいですか?

4

4 に答える 4

2

AUIViewは常にRectangular shapeです。これを変更することはできません。CALayerただし、マスキングを使用すると、必要な効果が得られる可能性があります。を作成し、UIViewそれにカスタム マスクを適用します。これにより、マスクには三角形の適切なデータが含まれます。次に、実際に配置したコンテンツは、適切な「三角形」UIViewの領域にのみ表示されます。

マスク レイヤーを作成するには、画像(png など) を使用するか、Core Graphicsを使用して三角形を描画します。あなたができることがいくつかあります:

お役に立てば幸いです。

于 2012-12-25T09:39:41.033 に答える
2

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 に設定することを忘れないでください。

于 2012-12-25T09:57:29.733 に答える
1

最初にこれUIImageUIViewControllerクラスに追加し、次にこれにこのメソッドを追加します...

タグを次の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");
        }
    }
}

これがお役に立てば幸いです

于 2012-12-25T09:26:53.223 に答える
1

タッチしたポイント ( ) から 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

于 2016-08-14T12:10:48.453 に答える