[解決済み] フォーム/ページシートのモーダル表示をプルダウンで表示するジェスチャーを無効にする
質問
iOS 13 では、フォームおよびページ シート スタイルを使用するモーダル プレゼンテーションは、パンダウン ジェスチャで閉じることができます。私のフォーム シートの 1 つでは、ユーザーがこのボックスに描画するとジェスチャが妨害されるため、これが問題になります。これは、垂直線を描く代わりに画面を下に引っ張ってしまいます。
シートとして表示されるモーダルビューコントローラーで、垂直方向のスワイプによるジェスチャーを無効にするにはどうしたらよいでしょうか。
設定方法
isModalInPresentation = true
を設定しても、シートは引き下ろされることができますが、解任されることはありません。
どのように解決するのですか?
一般に、ユーザーはすべてのアプリですべてのフォーム/ページ シートが同じ動作をすることを期待しているので、スワイプして閉じる機能を無効にしようとするべきではありません。代わりに、フルスクリーンのプレゼンテーション スタイルを使用することを検討するとよいでしょう。スワイプで解除できないシートを使用したい場合は、フォーム/ページシートに
isModalInPresentation = true
を設定しますが、この場合でもシートを垂直に引き下げることができ、タッチを離すと跳ね上がることに注意してください。また
UIAdaptivePresentationControllerDelegate をチェックしてください。
のドキュメントをチェックして、ユーザーがスワイプでそれを解除しようとしたときに反応するようにしてください。
アプリのジェスチャまたはタッチ処理がスワイプによる却下機能によって影響を受けるシナリオがある場合、それを修正する方法について Apple のエンジニアからいくつかの助言をもらいました。
システムのパン ジェスチャーの認識機能が開始されないようにすれば、ジェスチャーの破棄を防ぐことができます。これを行うには、いくつかの方法があります。
-
キャンバスの描画にジェスチャー認識機能を使用している場合、たとえば、独自の
UIGestureRecognizer
サブクラスに入力します。began
フェーズに入ります。と同じくらい早く認識すればUIPanGestureRecognizer
と認識すれば、あなたの勝ちとなり、シートの剥離ジェスチャーは無効になります。 -
canvas の描画がジェスチャー認識機能で行われる場合、動的な失敗の要件をセットアップして
-shouldBeRequiredToFailByGestureRecognizer:
(または関連するデリゲートメソッド) を使用して、動的な失敗の要件を設定します。NO
渡されたジェスチャー認識器がUIPanGestureRecognizer
. -
キャンバス描画が手動タッチ操作で行われる場合(例えば
touchesBegan:
など)、オーバーライド-gestureRecognizerShouldBegin
をオーバーライドし、タッチハンドリングビューでNO
を返し、渡されたジェスチャー認識ツールがUIPanGestureRecognizer
.
私のセットアップでは、#3 が非常にうまく機能することが証明されました。これは、ユーザーがシートを移動せずに描画できるようにしながら、描画キャンバスの外側の任意の場所をスワイプダウンして (ナビ バーのように) 閉じることができ、期待どおりに動作しました。
ジェスチャを無効化するために見つけようとすることはお勧めできません。これは、かなり動的で、たとえば異なるサイズ クラス間で切り替えたときにそれ自体を再度有効にできるようで、これは将来のリリースで変わる可能性があるからです。
関連
-
[iOS]コンパイルエラー:ld: アーキテクチャ x86_64 のシンボルが見つかりません。
-
EXC_BAD_ACCESS (code=2, address=0x0)
-
[解決済み] カスタムオブジェクトを含むNSMutableArrayをソートするにはどうすればよいですか?
-
[解決済み] NSの接頭辞はどういう意味ですか?
-
[解決済み] UITextViewのサイズをコンテンツに合わせるには?
-
[解決済み] UIDevice uniqueIdentifierは非推奨 - どうしたらいいの?
-
[解決済み] iOSで現在のデバイスの言語を取得するには?
-
[解決済み] UITableView - トップにスクロールする
-
[解決済み] iOS 7のUINavigationControllerで背面スワイプジェスチャーを無効にする方法
-
[解決済み] 提示されたビューコントローラを対話的に終了させないようにする
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
XCode のコンパイル例外を解決する clang: error: linker command failed with exit code 1
-
[解決済み] キーボードがあるときに、UITextFieldを編集開始時に上に移動させるには?
-
[解決済み] UIViewController のビューが表示されているかどうかを確認する方法
-
[解決済み] iOS 13 のフルスクリーンでモーダルを表示する
-
[解決済み] Unwind segueは何に使うのか、どう使うのか?
-
[解決済み] SwiftでUIAlertViewを作成するにはどうしたらいいですか?
-
[解決済み] iOSとWatchKitで画像のtintColorを変更する方法
-
[解決済み] Swift 3でディスパッチキューを作成する方法
-
[解決済み] ファイルはユニバーサル(3スライス)ですが、iOSの静的ライブラリのための(n)ARMv7-sスライスエラーが含まれていない、どうにかして回避するには?
-
[解決済み] iOSアプリをApple Developer Programや脱獄せずにデバイス上でテストすることができます。