当前位置: 首页 > 面试题库 >

如何处理自定义标注视图上的水龙头?

霍建柏
2023-03-14
问题内容

我正在添加这样的标注视图:

func mapView(mapView: MKMapView!,
        didSelectAnnotationView view: MKAnnotationView!) {
    let calloutView = UIView(frame:
        CGRect(x: 0, y: 0, width: 300, height: 120))

    calloutView.backgroundColor = UIColor.purpleColor()
    calloutView.center = CGPointMake(CGRectGetWidth(view.bounds) / 2.0, 0.0)
    calloutView.layer.anchorPoint = CGPointMake(0.5, 1.0)
    calloutView.layer.masksToBounds = false

    calloutView.userInteractionEnabled = true
    let calloutViewTapRecognizer = UITapGestureRecognizer(target: self,
        action: "onCalloutViewTap")
    calloutView.addGestureRecognizer(calloutViewTapRecognizer)

    view.addSubview(calloutView)
}

尽管我的onCalloutViewTap函数从未被调用过……但我很好奇理解原因并获得了一些可以处理与标注视图交互的东西。


问题答案:

这是因为注释视图仅检测其边界内的触摸。由于您的标注视图超出了范围,因此子视图无法识别点击。您需要pointInside:withEvent:在注释视图中覆盖该方法,以便您的标注实际上可以检测到触摸。

这是Objective-C中的一个示例:

- (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent*)event
{
    CGRect rect = self.bounds;
    BOOL isInside = CGRectContainsPoint(rect, point);

    if (!isInside)
    {
        for (UIView *view in self.subviews)
        {
            isInside = CGRectContainsPoint(view.frame, point);

            if (isInside)
            {
                break;
            }
        }
    }

    return isInside;
}

编辑

迅捷版:

override func pointInside(point: CGPoint, withEvent event: UIEvent?) -> Bool {
    let rect = self.bounds
    var isInside = CGRectContainsPoint(rect, point)

    if (!isInside) {
        for subview in subviews {
            isInside = CGRectContainsPoint(subview.frame, point)

            if (isInside) {
                break
            }
        }
    }

    println(isInside)

    return isInside;
}


 类似资料:
  • 问题内容: 我有一个 : 问题答案: 首先应注意,通过简单地调整系统提供的标注的属性,但 自定义左右附件(通过rightCalloutAccessoryView和leftCalloutAccessoryView),就可以对标注进行最简单的更改。您可以在中进行配置viewForAnnotation。 从iOS 9开始,我们可以使用detailCalloutAccessoryViewwhich来用可能

  • 主要内容:前记,1.自定义视图,2.自定义异常,3.自定义异常的原理前记 在前面的文章中, 表示了视图解析的原理和异常解析器的解析原理。 这篇通过如何自定义视图和自定义异常处理和自定义异常处理的原理进行说明。 这里说明一下, 自定义的视图和自定义的异常都是会代替容器默认的组件的, 异常还好说, 就是不符合就抛, 视图的话需要注意一下优先级, 可以在自定义的视图解析器上加上注解。 1.自定义视图 这里原理就是添加一个视图和视图解析器, 然后放入容器中, 最后访问相应

  • 我试图设置一个固定的范围为单条,水平条形图在Chart.JS 标记数组仅在垂直轴上工作,但我希望在X轴上有一组固定的标签。 示例:https://altonwells.webflow.io/chart-js

  • 我使用抽象处理器创建了一个自定义注释和注释处理器。这意味着我想在编译之前进行注释处理。我将自定义注释和处理器导出为Jar,并尝试将其与简单的java测试程序一起使用。我确信在编译时它会找到我的java处理器类,但不知何故,我并没有得到我在控制台上期望的o/p。下面是我的处理器中处理方法的代码。 此外,我故意使用以便我得到一个版本警告,它确认当我执行一个测试类时,它找到了我的注释处理器。 这里是我的

  • 然而,我很难从数据库视图中获得最近的更新。主要问题是何时向数据库中添加新条目。由于数据库是在初始化处理器时查询的,因此自定义处理器将不会有新的条目。 我尝试在public void onTrigger()函数中实现查询;然而,这将导致管道备份,因为它将对每个flowfile查询数据库(如果每秒有数千个flowfile传入,这就不理想了)。 处理器启动时是否有查询数据库的方法;不在每个flowfil

  • 本文向大家介绍Android如何自定义视图属性,包括了Android如何自定义视图属性的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家介绍了Android自定义视图属性的方法,供大家参考,具体内容如下 1. 自定义一个自己的视图类继承自View 2. 在res/values目录中新建一个attrs.xml文件 一个attr属性,对应了一个视图属性 3.最后看布局文件中如何利用我们创建的自定