我有一个图像,它看起来像一个三角形,但它的面积是一个矩形。
在这个图像中有两个块(在图像中用 1 和 2 表示),整个矩形是一个图像视图。
我只想检测图像第一部分的触摸。
只在这部分检测触摸怎么办?
我有一个图像,它看起来像一个三角形,但它的面积是一个矩形。
在这个图像中有两个块(在图像中用 1 和 2 表示),整个矩形是一个图像视图。
我只想检测图像第一部分的触摸。
只在这部分检测触摸怎么办?
AUIView
总是一个Rectangular shape,你不能改变它。但是,您也许可以通过使用CALayer
遮罩来获得您想要的效果。制作一个UIView
并对其应用自定义蒙版,其中蒙版中包含适合三角形的数据。然后,您放入的任何实际内容UIView
将仅在适当的“三角形”形状区域中可见。
要制作遮罩层,您可以使用图像(例如 png)或使用Core Graphics绘制三角形。您可以做一些事情:
希望对您有所帮助。
正如 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。
首先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