私は最近、iOS10とSwift 3にアップデートしました。そして、私がiOS10デバイス(私の場合はiPhone6s)でアプリケーションを実行するたびに、touchesBegan関数がランダムに発生します。iOS 10のtouchesBeganとの奇妙な遅延
:たまにこれは、次のエラーメッセージを伴う「ジェスチャー: 次のタッチする前に、システムのジェスチャー状態通知の受信に失敗しました」
興味深いことにiOS9を実行している私の古いiPhone5sは、この問題を再現しません。
私は最近、iOS10とSwift 3にアップデートしました。そして、私がiOS10デバイス(私の場合はiPhone6s)でアプリケーションを実行するたびに、touchesBegan関数がランダムに発生します。iOS 10のtouchesBeganとの奇妙な遅延
:たまにこれは、次のエラーメッセージを伴う「ジェスチャー: 次のタッチする前に、システムのジェスチャー状態通知の受信に失敗しました」
興味深いことにiOS9を実行している私の古いiPhone5sは、この問題を再現しません。
通常、iOSでは奇妙なUI遅延がスレッドと関係しています。 iOSとMac上のUI関連のメソッドはすべて、メインスレッドからのみ呼び出されることを意図しています。 APIは非常に非同期になり、多くのメソッドがブロックコールバックを取るため、バックグラウンドスレッドからUI関連のものを誤って実行するのは簡単です。
イメージの更新、テキストフィールドの更新、テーブルビューの再読み込みなどのUI関連のアクティビティは常にメインスレッドから行われるようにしてください。ブロック内でUIを処理している場合は、dispatch_async(dispatch_get_main_queue()、...)内でUI部品をラップすることができます。
私の経験では、これらのメソッドの1つに誤ってバックグラウンドで呼び出された場合、遅延しているタッチイベントなどの奇妙な結果を引き起こす "井戸の中毒"の影響があります。
私はタッチとホールドをシミュレートして、車の左右を操縦するのと同じ問題がありました。ここに私のためにそれを固定したものがあった。
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
if let touch = touches.first {
let location = touch.location(in: self)
let node: SKNode = atPoint(location)
if node == self.player1CarRight {
self.player1CarRotateRightTouching = true
}
}
}
へ:touchesEndedで
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
let touch:UITouch = touches.first! as UITouch
let touchLocation = touch.location(in: self)
if player1CarRight.contains(touchLocation) {
self.player1CarRotateRightTouching = true;
}
}
同じ変更:
からのフォローを変更
override func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent?) {
let touch:UITouch = touches.first! as UITouch
let touchLocation = touch.location(in: self)
if player1CarRight.contains(touchLocation) {
self.player1CarRotateRightTouching = false
}
}
私は今日、この行動に走った、おそらく別の理由。私のシナリオでは、touchesBeganを実装したビューのスーパービューにUITapGestureRecognizerを持つことが関係していました。 UITapGestureRecognizerはタップを認識していたため、タップレコグナイザのcancelsTouchesInViewのデフォルトはYESであるため、認識ツールがタッチを認識すると、ビューはタッチコールバックを取得しません。しかし、タッチして押し続けると、UITapGestureRecognizerがタッチを認識できず、ビューがコールバックを取得します。これは、touchesBeganへの遅延呼び出しのように見えます。
私はこの調査の一部として、UIButtonsが特別な扱いを受けることにも気付きました。 UITapGestureRecognizerが動作している場合、UIButtonのタッチは考慮されません。
iOS10で3Dタッチ関連の問題が発生しました。好奇心の念から、デバイスの一般 - >アクセシビリティで3Dタッチを無効にすると、問題は消えますか? – Columbo
@Columboはい、実際に!私はちょうど3Dタッチをオフにし、問題は停止しました。実際には画面の左下側でしか起こらなかったので、私のデバイスは故障していると単純に想定していました。うまくいけば、これは単なるソフトウェアの問題です。 – NJanf
おそらく最も良い選択肢は、Appleにバグレポートを提出することです。 – Columbo