2016-12-26 4 views
0

3D 터치를 사용하려고합니다. 스크롤 할 때 아래 기능을 제외하고는 모든 것이 정상입니다. 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 개의 좌표계가 있으며, 그것은 자체이며 superview입니다. 뷰의 좌표계는 거의 항상 뷰의 왼쪽 상단에 0,0을가집니다. 그 점은 수퍼 뷰의 좌표계에서 0,0이 아닌 다른 곳이 될 가능성이 있습니다.

점이 생기면 좌표계가 표현 된 좌표계를 알아야합니다. 좌표계간에 점을 변환 할 수있는 다양한 방법이 UIView에 있습니다.

코드가 작동하려면 포인트가 표현 된 뷰의 좌표 시스템을 알아야합니다. 테이블 뷰에서 셀을 검색하므로 테이블 뷰의 좌표계를 사용하는 것이 좋습니다.

아직 3D 터치 장치 용으로 개발되지 않아 사용중인 기능에 익숙하지 않습니다. 요점은 당신이 그것에 빠져들고있는 것과 당신이 표현한 좌표 체계가 어디에서 왔습니까?

관련 문제