Facebookアプリでは、アルバムの一部である写真を「覗く」と、指を横にスライドさせて他の写真に移動することができます。3Dタッチのピークとポップで、(Facebookのように)ピーク時にユーザーパンを検出するにはどうすればよいですか?
これはAPI内でどのように実行されますか?公開されているのは、View Controllerを提供し、そのView Controllerをポップ時にコミットすることだけです。
Facebookアプリでは、アルバムの一部である写真を「覗く」と、指を横にスライドさせて他の写真に移動することができます。3Dタッチのピークとポップで、(Facebookのように)ピーク時にユーザーパンを検出するにはどうすればよいですか?
これはAPI内でどのように実行されますか?公開されているのは、View Controllerを提供し、そのView Controllerをポップ時にコミットすることだけです。
Peeking中にユーザーのタッチ位置を追跡できる小さなトリックがあります。
基本的には、覗き見を開始するときにユーザーのタッチ位置の追跡を開始し、ユーザーが表示コントローラーをポップしたり、タッチを解除したりするとトラッキングを終了するジェスチャー認識機能があります。ジェイク認識プログラムは、Peekを起動しているビューコントローラのビューに追加する必要があります。
Peeked View Controllerにアクセスできるため、そのView Controllerから、ユーザーのタッチ位置に相関する関数を呼び出すことができます。
だけで簡単にモックアップ:
@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];
}
私は実際にここにこの仕組みをカバーしてブログ記事を作っ: https://medium.com/behancetech/peek-pan-extending-3d-touch-f6520c38fe51#.4xz7lcm9o
ここにこれを統合することができますオープンソースプロジェクトでもあります: https://github.com/adobe-behancemobile/PeekPan
上記のコードサンプルでカバーされていない重要な詳細の1つは、コントローラーがUIPanGestureRecognizerとretuの代理人として設定する必要があります'shouldRecognizeSimultaneouslyWithGestureRecognizer:'メソッドから 'rn' YES'を返します。 – BradB