我有一个图像,它看起来像一个三角形,但它的区域是一个矩形。
在此图像中有两个块(在图像中用1和2表示),整个矩形是图像视图。
我想仅在图像的第一部分检测触摸。
如何仅在此部分中检测触摸?
答案 0 :(得分:2)
UIView
始终是矩形,您不能改变它。但是,您可以使用CALayer
屏蔽获得所需的效果。创建一个UIView
并对其应用自定义蒙版,其中蒙版中包含三角形的相应数据。然后,您放在UIView
中的所有实际内容只会在相应的'三角形'形状区域中显示。
要制作遮罩图层,您可以使用图像(例如png)或使用核心图形绘制三角形。您可以做某些事情:
您可以通过这个美丽的Link获得帮助。
这里有an example。
另见此SO问题:Learning Core Graphics
您可以查看此Apple的Documentation。
希望这会对你有所帮助。
答案 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)
来源:
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