2016-12-26 104 views
0

我正在嘗試使用3D Touch,除了下面的功能,一切都很好,當滾動時我無法獲得正確的值indexPathindexPathForRow(at: location)。此功能不能說用戶是否滾動表格,並且始終將用戶在應用中可以看到的第一行設置爲第一行。indexPathForRow不會返回正確的值

我的代碼:

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觸控實現,但這個功能似乎每個人都工作正常,除了我。

回答

0

在iOS中,每個視圖都有2個座標系,它是自己的,它是超級視圖。視圖的座標系幾乎總是在視圖的左上方有0,0。這個點很可能在超視圖的座標系中是0,0以外的地方。

當你得到一個點時,你需要知道它表達的是誰的座標系。UIView中有各種方法可以在座標系之間轉換點。

爲了讓您的代碼正常工作,您需要知道哪個視圖的座標系被表達。由於您在表視圖中搜索單元格,因此使用表視圖的座標系是合理的選擇。

我還沒有開發3D觸摸設備,所以我不熟悉你正在使用的功能。這個點來自你傳遞給它的點,它表示的座標系是什麼?