- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试为我的应用程序弹出一个弹出窗口。到目前为止,弹出窗口在固定坐标处弹出,我试图让它在用户点击的位置弹出。这是我的:
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 中启用了interaction
和multi-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 启用了用户交互:
最佳答案
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/
背景 我最近在 merge 期间遇到了一个意外未 merge 的文档文件的问题。 无论出于何种原因,我搞砸了 merge 并有效地删除了文件(和其他几个文件),因为我忘记了它们的存在。 现在我想查看我
我在我的网站上使用旧的 mysql 版本和 php 版本 4。 我的表结构: | orders_status_history_id | orders_id | orders_status_id |
我是一名优秀的程序员,十分优秀!