当前位置:  开发笔记 > 编程语言 > 正文

touchesBegan函数从不输入

如何解决《touchesBegan函数从不输入》经验,为你挑选了1个好方法。

我正在尝试为我的应用弹出一个弹出窗口。到目前为止,弹出窗口以固定的坐标弹出,我试图将其弹出到用户点击的位置。这就是我所拥有的:

override func touchesBegan(touches: Set, withEvent event: UIEvent?) {
    print("touchesbegan")
    for touch in touches{
        //Handle touch
        let location = touch.locationInView(self.view)
        let storyboard = UIStoryboard(name: "Main", bundle: nil)

        let vc = storyboard.instantiateViewControllerWithIdentifier("ColonyPopoverController") as! ColonyPopoverController
        vc.modalPresentationStyle = .Popover
        vc.preferredContentSize = CGSizeMake(200, 150)

        if let popoverController = vc.popoverPresentationController {
            popoverController.delegate = self
            popoverController.sourceRect = CGRectMake(location.x, location.y, 20, 10)
            popoverController.sourceView = self.view
            self.presentViewController(vc, animated: true, completion: nil)
        }
    }
}

我注意到当我点击模拟器时,打印语句永远不会打印。

我认为interaction并已multi-touch启用。我知道这种方法很好用,因为我也将其与Google Maps集成在一起,因此当我点击时,会出现一个google pin:

func mapView(mapView: GMSMapView!, didTapAtCoordinate coordinate: CLLocationCoordinate2D) {
    print("You tapped at \(coordinate.latitude), \(coordinate.longitude)")
    let marker = GMSMarker()
    marker.position = CLLocationCoordinate2DMake(coordinate.latitude, coordinate.longitude)
    marker.title = "Sydney"
    marker.snippet = "Australia"
    marker.map = mapView

}

我也看到了打印报表。不知道我在这里想念的是什么。

超级视图和视图均启用了用户交互:



1> rob mayoff..:

导致视图无法收到触摸的主要原因有三个:

它已userInteractionEnabled设置为false。显然,您已经验证了事实并非如此。

其他一些视图位于感兴趣的视图之上,并且正在接受触摸。请注意,子视图位于其父视图的顶部(在儿童覆盖的区域中),情节提要文档大纲中较低的视图位于大纲中较高的任何同级项的顶部。(在屏幕截图中,KittyMapper®位于“地图视图”的顶部,在它们重叠的任何区域中。)userInteractionEnabled如果您不希望顶视图接收触摸,则需要将其设置为false。

兴趣视图超出其父视图的范围。

命中测试以递归方式工作:窗口调用hitTest(_:withEvent:)其每个子级(从上到下的顺序),直到一个子级返回非nil为止。hitTest(_:withEvent:)如果pointInside(_:withEvent:)返回false,则立即返回nil ;否则,hitTest(_:withEvent:)调用hitTest(_:withEvent:)子项(从上到下的顺序),直到返回非nil为止;self如果没有子项报告命中,则返回。

因此,如果子项超出其父项的范围,则它是可见的(如果所有祖先都clipsToBounds设置为false),但永远不会收到触摸,因为其父项pointInside(_:withEvent:)会拒绝看似在子视图中的触摸。

通过使用Xcode的“调试视图层次结构”功能检查视图层次结构,您也许可以诊断出最后两种情况。

推荐阅读
jerry613
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有