检测UIImageView的一部分触摸

时间:2012-12-25 09:11:01

标签: iphone cocoa-touch uiimageview

我有一个图像,它看起来像一个三角形,但它的区域是一个矩形。 enter image description here

在此图像中有两个块(在图像中用1和2表示),整个矩形是图像视图。

我想仅在图像的第一部分检测触摸。

如何仅在此部分中检测触摸?

4 个答案:

答案 0 :(得分:2)

UIView始终是矩形,您不能改变它。但是,您可以使用CALayer屏蔽获得所需的效果。创建一个UIView并对其应用自定义蒙版,其中蒙版中包含三角形的相应数据。然后,您放在UIView中的所有实际内容只会在相应的'三角形'形状区域中显示。

要制作遮罩图层,您可以使用图像(例如png)或使用核心图形绘制三角形。您可以做某些事情:

希望这会对你有所帮助。

答案 1 :(得分: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。

答案 2 :(得分:1)

首先在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");
        }
    }
}

我希望这可以帮到你

答案 3 :(得分:1)

您必须从触摸点(point)创建一个90度三角形,然后您必须计算蓝色角度(首先检查图像)是否大于或小于红色角度。如果是,那么点在内部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)

enter image description here

来源:

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