我正在尝试使用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/

10-09 16:15