gpt4 book ai didi

swift - touchesBegan 函数从未被输入

转载 作者:行者123 更新时间:2023-11-28 09:37:04 29 4
gpt4 key购买 nike

我正在尝试为我的应用程序弹出一个弹出窗口。到目前为止,弹出窗口在固定坐标处弹出,我试图让它在用户点击的位置弹出。这是我的:

override func touchesBegan(touches: Set<UITouch>, 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)
}
}
}

我注意到当我在模拟器上点击时打印语句从不打印。

我在 View 中启用了interactionmulti-touch。我知道这很好用,因为我还将它与 Google map 集成在一起,所以当我点击时,会出现一个 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

我也看到了打印语句。不确定我在这里遗漏了什么。

为父 View 和 View 启用了用户交互:

enter image description here

enter image description here

最佳答案

View 没有在您期望的时候接收到触摸的主要原因有以下三个:

  • 它已将 userInteractionEnabled 设置为 false。显然您已经证实情况并非如此。

  • 其他一些 View 在感兴趣的 View “之上”,并且正在接收触摸。请注意, subview 位于其父 View 之上(在 subview 覆盖的区域中), Storyboard文档大纲中较低的 View 位于大纲中较高的任何 sibling 之上。 (在您的屏幕截图中,KittyMapper® 在 map View 的顶部,在它们重叠的任何区域。)如果您不希望顶部 View 接收触摸,则需要将 userInteractionEnabled 设置为 false。

  • 感兴趣的 View 在其父 View 的范围之外。

    HitTest 以递归方式工作:窗口在其每个子项上调用hitTest(_:withEvent:)(按从上到下的顺序)直到其中一个返回非零;如果 pointInside(_:withEvent:) 返回 false,hitTest(_:withEvent:) 立即返回 nil;否则 hitTest(_:withEvent:) 调用子节点上的 hitTest(_:withEvent:)(按从上到下的顺序)直到一个返回非零,然后返回self 如果没有 child 报告命中。

    因此,如果一个 child 在其 parent 的边界之外,它可以是可见的(如果所有祖先都将 clipsToBounds 设置为 false),但永远不会接收到触摸,因为其 parent 的 pointInside(_: withEvent:) 将拒绝出现在 subview 上的触摸。

您可以通过使用 Xcode's “Debug View Hierarchy” feature 检查您的 View 层次来诊断最后两种情况。 .

关于swift - touchesBegan 函数从未被输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34527946/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com