【问题标题】:UIImageView - how to create clickable area which may be in any shape inside an image view?UIImageView - 如何在图像视图中创建可以是任何形状的可点击区域?
【发布时间】:2018-04-05 00:49:18
【问题描述】:

我必须将地图的图像(地点、建筑物的概览等)合并到图像视图中。地图中会有一些地方应该可以选择。通常,一个图像有 20-25 个位置,这些位置必须是可选的。这些地方的形状将彼此不同。

在 html 中我们有 map 标签来完成这种任务,我需要在 iOS 原生平台上解决这个问题。任何建议或帮助都会很棒!

【问题讨论】:

  • 到目前为止你尝试了什么?
  • 我还没有编写逻辑代码。搜索以知道某些东西是否已经存在。尝试使用贝塞尔路径作为位置边界。很快就会放一些代码。

标签: ios objective-c swift uiimageview


【解决方案1】:

关键思想:您可以将UITapGestureRecognizer 添加到UIImageView。设置selector,每次点击都会触发。在selector 中,您可以检查点击完成的坐标。如果坐标满足你触发事件的条件,那么你就可以执行你的任务了。

添加手势识别器:

UITapGestureRecognizer *singleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleImgViewTap:)];
[singleTap setNumberOfTapsRequired:1];

[yourImgView addGestureRecognizer:singleTap];

设置选择器:

-(void)handleImgViewTap:(UITapGestureRecognizer *)gestureRecognizer

{
    // this method gonna fire everytime you tap on the 
    // image view. you have to check does the point where
    // the tap was done, satisfy your path/area condition.

    CGPoint point = [gestureRecognizer locationInView:yourImgView];

    // here point.x and point.y is the location of the tap
    // inside your image view. 
    if(/*your condition goes here*/)
    {
         // execute your staff here.
    }
}

希望对您有所帮助,祝您 ios 编码愉快。

【讨论】:

  • 我的问题是,我必须先设置可点击区域。该区域不会是矩形。它将呈多边形,当用户点击特定区域(用户可以对其执行某些操作的地方)时,我必须单独突出显示该位置(使用边界线或突出显示该区域)。为此,我必须首先定义用户可以点击的图像视图中的区域。我想象的是在图像视图中定义一个多边形,一旦点击,只需比较命中点是否存在于地图中的任何多边形中。现在有什么想法吗?感谢您的努力
  • 对于多边形,您可以先制作一个凸包。当点击时,您可以决定这些点是否位于凸包内。如果该点位于船体内部,则执行为该区域指定的操作。
  • 是的,我知道。但是,如何在我的场景中实现它?
  • 请仔细阅读评论。检查“是凸包内的点”的代码是常见的问题集,甚至stackoverflow都有它。 stackoverflow.com/questions/28801832/…
【解决方案2】:

给定一个视图(或图像视图),您应该定义一个形状的 UIBezierPath。 向该视图添加一个taprecognizer,并设置与识别器委托相同的视图。 在委托方法中使用 UIBezierPath.contains(_:) 来了解点击是否在路径内,并决定是否触发点击事件。

如果您需要代码示例,请告诉我。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-01-05
    • 1970-01-01
    • 2015-04-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多