我正在尝试使用 3D Touch,一切都很好,除了下面的函数,我无法使用 indexPathForRow(at: location)
获得正确的值 indexPath
当我滚动时。此函数无法说明用户是否滚动表格,并且始终将用户在应用中可以看到的第一行设置为第一行。
我的代码:
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 中,每个 View 都有 2 个坐标系,一个是自己的,另一个是父 View 的。 View 的坐标系几乎总是在 View 的左上角有 0,0。该点可能位于其父 View 坐标系中 0,0 以外的某个位置。
当你得到一个点时,你需要知道它在谁的坐标系中表示。UIView 中有各种方法可以让你在坐标系之间转换点。
为了让您的代码正常工作,您需要知道该点在哪个 View 的坐标系中表示。由于您正在表格 View 中搜索单元格,因此使用表格 View 的坐标系将是一个合理的选择。
我还没有为 3D 触摸设备开发过,所以我不熟悉你正在使用的功能。您传递给它的点来自哪里,它在什么坐标系中表示?
关于ios - indexPathForRow 不会返回正确的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41332927/