3D Touch peek 和 pop 问题
3D Touch peek and pop trouble
我正在尝试在我的 application.but 中实现 peek 和 pop 功能,因为我还不能测试它,我想知道我做的是否正确,我觉得有什么不对吗?
- (UIViewController *)previewingContext:(id<UIViewControllerPreviewing>)previewingContext viewControllerForLocation:(CGPoint)location
{
NSLog(@"TEST");
NSIndexPath *indexPath = [self.myTableView indexPathForRowAtPoint:location];
if (indexPath) {
UITableViewCell *cell = [self.myTableView cellForRowAtIndexPath:indexPath];
NSDictionary *dict = [self.array objectAtIndex:indexPath.row];
cell.textLabel.text = [dict objectForKey:@"name"];
DetailViewController *previewController = [[DetailViewController alloc] init];
// previewController.content = content;
previewingContext.sourceRect = cell.frame;
return previewController;
}
return nil;
}
我目前正在我们的应用程序中实现它,看起来大体上是正确的。我遇到的一个问题是location给你的坐标是给UIViewController的view的,不是UITableView的。根据您的设置,它们可能相同,但就我而言,我需要将位置转换为 UITableView 的坐标。
CGPoint convertedLocation = [self.view convertPoint:location toView:self.tableView];
当然,您的里程可能会有所不同。
您的代码唯一的问题是获取 convertedLocation 的方式不正确。
即使在滚动 table 视图后,下面的代码也会获得正确的位置。
CGPoint convertedLocation = [self.tableView convertPoint:location fromView:self.view];
NSIndexPath *indexPath = [self.tableView indexPathForRowAtPoint:convertedLocation];
如果您使用正确的 sourceView 注册了 previewDelegate,则无需更正位置。所以而不是
[self registerForPreviewingWithDelegate:self sourceView:self.view];
你应该这样注册:
[self registerForPreviewingWithDelegate:self sourceView:self.tableView];
然后您从委托调用中获得的位置会将滚动/contentOffset 考虑在内。
我正在尝试在我的 application.but 中实现 peek 和 pop 功能,因为我还不能测试它,我想知道我做的是否正确,我觉得有什么不对吗?
- (UIViewController *)previewingContext:(id<UIViewControllerPreviewing>)previewingContext viewControllerForLocation:(CGPoint)location
{
NSLog(@"TEST");
NSIndexPath *indexPath = [self.myTableView indexPathForRowAtPoint:location];
if (indexPath) {
UITableViewCell *cell = [self.myTableView cellForRowAtIndexPath:indexPath];
NSDictionary *dict = [self.array objectAtIndex:indexPath.row];
cell.textLabel.text = [dict objectForKey:@"name"];
DetailViewController *previewController = [[DetailViewController alloc] init];
// previewController.content = content;
previewingContext.sourceRect = cell.frame;
return previewController;
}
return nil;
}
我目前正在我们的应用程序中实现它,看起来大体上是正确的。我遇到的一个问题是location给你的坐标是给UIViewController的view的,不是UITableView的。根据您的设置,它们可能相同,但就我而言,我需要将位置转换为 UITableView 的坐标。
CGPoint convertedLocation = [self.view convertPoint:location toView:self.tableView];
当然,您的里程可能会有所不同。
您的代码唯一的问题是获取 convertedLocation 的方式不正确。
即使在滚动 table 视图后,下面的代码也会获得正确的位置。
CGPoint convertedLocation = [self.tableView convertPoint:location fromView:self.view];
NSIndexPath *indexPath = [self.tableView indexPathForRowAtPoint:convertedLocation];
如果您使用正确的 sourceView 注册了 previewDelegate,则无需更正位置。所以而不是
[self registerForPreviewingWithDelegate:self sourceView:self.view];
你应该这样注册:
[self registerForPreviewingWithDelegate:self sourceView:self.tableView];
然后您从委托调用中获得的位置会将滚动/contentOffset 考虑在内。