2015-10-24 12 views
6

アプリに基本的な3Dタッチ機能を追加し始めたばかりですが、最初に追加する試みがうまくいきました。iOS 3Dタッチピークが終了した(ポップなし)場合の検出

しかし、私は、ピークが終わったことを検出してポップに入っていないことを検出する方法があるかどうか疑問に思っていました。

UIViewControllerPreviewingDelegateメソッドは、ピークまたはポップが要求されていることを伝えるのに適していますが、ピークが終了してポップになっていないと伝える方法はありません。

Peeked ViewControllerには、現在のところ覗いていることを知る方法がありますが、これで十分だろうと思います。基本的に私は、ビューに入るときに普通にいくつかのものを作成するセグを持っています。ユーザーがポップすることなくちょうど終わるように選択すると、それを覗くと元に戻す必要があります。必要なクリーンアップを実行できるようにこのケースを検出する良い方法を参照してください。

乾杯

+0

私は同じ問題があります。 AppleがUIViewControllerPreviewingDelegateに別の機能を追加したいと考えています。 – HMHero

+1

しばらくの間、vcが覗き見ているかどうかを示すフラグを設定し、previewingContext(previewingContext:UIViewControllerPreviewing、viewControllerForLocationの場所:CGPoint)に設定し、previewingContext(previewingContext:previewViewContext:false)にリセットすることができます。UIViewControllerPreviewing、commitViewController viewControllerToCommit:UIViewController )。 – HMHero

+0

おかげさまで私も同様の考えを持ち、覗き見の上で受けられるのが良いと思ったすべての覗き見のアクションのための議定書を作った。残念ながらプレビューされたビューは消える前にビューがポップされているので、まだ消えているピークとピークのピークを区別できません – jimbobuk

答えて

15

あなたがregisterForPreviewingWithDelegate()を使用してプレビューするための登録は、これはUIViewControllerPreviewingプロトコルに準拠したコンテキストを返します。このプロトコルには、覗き見/ポップで使用されるジェスチャレコグナイザへの参照が含まれています(previewingGestureRecognizerForFailureRelationship)。これは、他のジェスチャ認識プログラムが同時に認識される可能性がある場合に使用することを目的としていますが、独自のオブジェクトをターゲットとして追加して変更を観察することもできます。

今、あなたが覗いているとき、このジェスチャ認識装置の状態は.Changedになります。ポップせずにリリースすると、状態は.Endedに変わります。あなたがポップすると、状態は.Cancelledに変わります(私は実際にこれが他の方法であることを期待していましたが、少なくともその違いを知ることができます)。重要なのは、この状態がの前にに変更されていることです。あなたのピークビューコントローラのviewDidDisappearが呼び出されるので、時間内にフラグを調整できます。

+0

本当に有望ですね。私は一見を持って、それが働いたら答えを受け入れるでしょう!ありがとうございました! – jimbobuk

+1

が動作しますが、previewActionItemsのためにスクロールすると、まだpeekモードになっていても.Endedになります – CiNN

+3

Swiftでサンプルコードを書きました:[ShingoFukuyama/3DTouchDetectStateOfPeekPopCancel](https://github.com/ShingoFukuyama/3DTouchDetectStateOfPeekPopCancel) –

関連する問題