2016-11-07 8 views
3

一般的に私のSpriteKitゲーム内でアイコンが強制的に押されたときに生成される触覚フィードバックを取得したい。現在、私は、私はif touch.force > CGFloat(6.66)条件が満たされたときに発生する(PEEKやポップに類似)触覚フィードバックをしたいと思い、次のように3Dタッチアプリアイコンを取得する方法SpriteKitのpeekまたはpopに似た触覚フィードバック

override func touchesMoved(_ touches: Set<UITouch>, with event: UIEvent?) { 
    for touch in touches { 
     if touch.force > CGFloat(6.66) { 
     shootOut() 
     } 
    } 
} 

を3Dタッチを使用しています。これはどうすればできますか?

答えて

2

PEEK /ポップ触覚フィードバックは、このクラスは、iOSの10の新機能ですが、上の作品(のためのdocsはかなり不完全であるが、彼らはまた、WWDC16 videoでそれについて話しています。)iOSの10にUIPreviewInteractionで行うことができますしかし、peek/pop触覚フィードバックのアイデアは、peek/popと概念的に似た何かをしているUIに結びつけるべきだということです。 (たとえそれが覗き見/ポップ感覚を「無料」で得ることができないカスタムUIであっても)Just like on Apple Watch、iPhone上の各触覚は意味を持ち、それらの意味は彼らが意図した用途。 (一方、UIPreviewInteractionを使用すると、タッチ力と触覚を生成するタイミングとの相関関係が自動的に処理されます)。

したがって、より汎用的な触覚フィードバックをお探しの場合は、iOS 10また、さまざまな状況で使用するためのいくつかの異なる種類の触覚を提供する別個のAPIもあります。ドキュメントのUIFeedbackGeneratorを確認し、提供されているオプションを使用して遊んでください。ゲームに適したものが見つかるかもしれません。

UIFeedbackGeneratorは、iOS 10とiPhone 7の両方を必要とする - それは、新しいデバイスの第2世代Tapticエンジンで使用可能なハプティック信号のより豊富な語彙のために特別なので、iPhone 6S上で使用される場合には効果がありません。

+0

を参照してください。「ビューコントローラーを実際に見ている/ポップしている場合にのみ、同じ触覚を得る」そうではありません。 UIPreviewInteractionは、ストーリーの中にView Controllerなしであなたにそのような応答を与えます(そして、それはWWDC 2016のビデオでこのトピックについてあなたに伝えます)。 – matt

+0

D'oh。そのことを忘れてしまった。 :)しかし、HIのガイドラインでは、それをpeek/pop以外のものに使用することを勧めていません。peek/pop UIから分離されているため、同様のやりとりを作成するカスタムUIが同じフィードバックを使用できます。それに応じて編集された答え。 – rickster

+0

"それでも、HIのガイドラインは、それを理解する方法ではなく、WWDCビデオで示したことを私がどのように理解したかはわかりません。 – matt

1

あなたはUIPreviewInteractionとUIPreviewInteractionDelegateを探しています。基本的に、それは力のタッチのためのジェスチャー認識装置です。 (なぜ彼らは実際にを作っていませんでしたか?ジェスチャーレコグナイザーが私を打ち負かします。)force touchを使って "bubble"をポップするforce-touchベースの "game"のexampleがあります。これは、ジェスチャーとしての力の量を測定して対応する方法を示しています。

0

あなたはこれらの

UIImpactFeedbackGenerator

UINotificationFeedbackGenerator

UISelectionFeedbackGenerator

例えば

// Impact 
let generator = UIImpactFeedbackGenerator(style: .heavy) 
generator.impactOccurred() 
generator.prepare() // prepare for next time, should ideally call this before playing first time as well 

// Selection 
let generator = UISelectionFeedbackGenerator() 
generator.selectionChanged() 
generator.prepare() // prepare for next time, should ideally call this before playing first time as well 

// Notification 
let generator = UINotificationFeedbackGenerator() 
generator.notificationOccurred(.warning) 
generator.prepare() // prepare for next time, should ideally call this before playing first time as well 

だけですべてで遊んを使用することができますあなたのゲームに触覚フィードバックを得るために、ジェネレータと設定を参照し、あなたのために何がベストかを確認します。

・ホープこれはあなたがタッチを使用する場合があります

0
if touch.force > CGFloat(6.66) { 

に役立ちます。代わりにハードコードされた定数のmaximumPossibleForce:

touch.force/touch.maximumPossibleForce 

力タッチ利用可能かどうかをチェックするためには良い考えかもしれませんそれはまたです:正確用として

if(is3dTouchAvailable(traitCollection: self.view!.traitCollection)) { 
    //... 
} 

詳細とコードサンプルhttp://www.mikitamanko.com/blog/2017/02/01/swift-how-to-use-3d-touch-introduction/

アイコン力のタッチと同じ「効果」、ここでは:

let generator = UIImpactFeedbackGenerator(style: .heavy) 
generator.prepare() 

generator.impactOccurred() 

触覚フィードバックのサポートとフォールバックの確認について詳しくは、http://www.mikitamanko.com/blog/2017/01/29/haptic-feedback-with-uifeedbackgenerator/

関連する問題