我正在尝试使用3D Touch,但一切都很好,但在下面的函数中,滚动时无法使用indexPath
获得正确的值indexPathForRow(at: location)
。此功能无法说出用户是否滚动表格,并且始终将用户在应用中可以看到的第一行设置为第一行。
我的代码:
func previewingContext(_ previewingContext: UIViewControllerPreviewing, viewControllerForLocation location: CGPoint) -> UIViewController? {
guard let indexPath = workoutTable?.indexPathForRow(at: location) else {return nil }
guard let cell = workoutTable?.cellForRow(at: indexPath) else {return nil }
guard let workoutDetailPeek = storyboard?.instantiateViewController(withIdentifier: "WorkoutDetailPeek") as? WorkoutDetailPeek else {print("else31"); return nil }
workoutDetailPeek.workoutId = "\(Int(workout[(indexPath as NSIndexPath).row].workoutId)!-2)"
workoutDetailPeek.preferredContentSize = CGSize(width: 400.0, height: 267.0)
previewingContext.sourceRect = cell.frame
return workoutDetailPeek
}
我经历过不同的3D Touch实现,但是此功能似乎对除我以外的所有人都适用。
最佳答案
在iOS中,每个视图都有2个坐标系,分别是自己的,也就是 super 视图。视图的坐标系几乎总是在视图的左上方具有0,0。在 super 视图的坐标系中,该点可能不是0,0。
当您得到一个点时,您需要知道它在谁的坐标系中表达。UIView中有多种方法可以让您在坐标系之间转换点。
为了使代码正常工作,您需要知道表示点的视图的坐标系。由于要在表格视图中搜索单元格,因此使用表格视图的坐标系将是一个合理的选择。
我尚未针对3D触摸设备进行开发,因此我不熟悉您使用的功能。您要传递的点从哪里来?它以什么坐标系表示?
关于ios - indexPathForRow将不会返回正确的值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41332927/