1

我有一个图像,它看起来像一个三角形,但它的面积是一个矩形。 在此处输入图像描述

在这个图像中有两个块(在图像中用 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: 和 co。然后测试接触点是否在您感兴趣的区域内。对于您的特定要求(图像的三角形一半),测试非常简单。

-(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 回答