使用 3D touch peek 和 pop,您如何检测用户在 peek 期间平移(如 Facebook)?
With 3D touch peek and pop, how do you detect the user panning during a peek (like Facebook)?
在 Facebook 应用中,如果您 "peek" 相册中的照片,您可以水平滑动手指转到其他照片。
这在 API 中是如何完成的?我所看到的只是提供一个视图控制器并在弹出时提交该视图控制器。
有一个小技巧,您可以在 Peeking 时跟踪用户的触摸位置。
你基本上有一个手势识别器,它在你开始 Peeking 时开始跟踪用户的触摸位置,并在用户弹出视图控制器或释放 his/her 触摸时结束跟踪。应该将手势识别器添加到调出 Peek 的视图控制器的视图中。
由于您有权访问 Peeked 视图控制器,因此您可以从该视图控制器调用与用户触摸位置相关的函数。
只是一个快速模型:
@property (nonatomic, weak, nullable) ViewControllerClass *peekedVC;
- (void)handleGestureRecognizer:(UIPanGestureRecognizer *)gr {
if (peekedVC && gr.state == UIGestureRecognizerStateChanged) {
CGPoint point = [gr locationInView:self.view];
[peekedVC handle:point.x];
}
}
- (UIViewController *)previewingContext:(id<UIViewControllerPreviewing>)previewingContext
viewControllerForLocation:(CGPoint)location {
NSIndexPath *indexPath = [self.collectionView indexPathForItemAtPoint:location];
UICollectionViewCell *cell = [self.collectionView cellForItemAtIndexPath:indexPath];
[previewContext setSourceRect:cell.frame];
ViewControllerClass *vc = [ViewControllerClass new];
self.peekedVC = vc;
return vc;
}
- (void)previewingContext:(id<UIViewControllerPreviewing>)previewingContext
commitViewController:(UIViewController *)viewControllerToCommit {
self.peekedVC = nil;
[self showViewController:viewControllerToCommit sender:self];
}
我实际上写了一个博客 post,其中介绍了这里的机制:
https://medium.com/behancetech/peek-pan-extending-3d-touch-f6520c38fe51#.4xz7lcm9o
还有一个开源项目可以帮助将其集成到此处:
https://github.com/adobe-behancemobile/PeekPan
在 Facebook 应用中,如果您 "peek" 相册中的照片,您可以水平滑动手指转到其他照片。
这在 API 中是如何完成的?我所看到的只是提供一个视图控制器并在弹出时提交该视图控制器。
有一个小技巧,您可以在 Peeking 时跟踪用户的触摸位置。
你基本上有一个手势识别器,它在你开始 Peeking 时开始跟踪用户的触摸位置,并在用户弹出视图控制器或释放 his/her 触摸时结束跟踪。应该将手势识别器添加到调出 Peek 的视图控制器的视图中。
由于您有权访问 Peeked 视图控制器,因此您可以从该视图控制器调用与用户触摸位置相关的函数。
只是一个快速模型:
@property (nonatomic, weak, nullable) ViewControllerClass *peekedVC;
- (void)handleGestureRecognizer:(UIPanGestureRecognizer *)gr {
if (peekedVC && gr.state == UIGestureRecognizerStateChanged) {
CGPoint point = [gr locationInView:self.view];
[peekedVC handle:point.x];
}
}
- (UIViewController *)previewingContext:(id<UIViewControllerPreviewing>)previewingContext
viewControllerForLocation:(CGPoint)location {
NSIndexPath *indexPath = [self.collectionView indexPathForItemAtPoint:location];
UICollectionViewCell *cell = [self.collectionView cellForItemAtIndexPath:indexPath];
[previewContext setSourceRect:cell.frame];
ViewControllerClass *vc = [ViewControllerClass new];
self.peekedVC = vc;
return vc;
}
- (void)previewingContext:(id<UIViewControllerPreviewing>)previewingContext
commitViewController:(UIViewController *)viewControllerToCommit {
self.peekedVC = nil;
[self showViewController:viewControllerToCommit sender:self];
}
我实际上写了一个博客 post,其中介绍了这里的机制: https://medium.com/behancetech/peek-pan-extending-3d-touch-f6520c38fe51#.4xz7lcm9o
还有一个开源项目可以帮助将其集成到此处: https://github.com/adobe-behancemobile/PeekPan