web-dev-qa-db-ja.com

iOS 13セグメントコントロール:スワイプジェスチャーを削除してセグメントを選択

TLDR:iOS 13でUISegmentedControlのスワイプ/パンジェスチャー認識機能を削除する方法

こんにちは、iOS 13では、UISegmentedControlで多くの変更がありました。ほとんどの場合、変更は外観ベースでした。しかし、私のアプリをめちゃくちゃにしている別の機能変更があります。

IOS 13では、UISegmentedControlsを使用して、選択したいセグメントをタッチするだけでなく、スワイプ/パンして選択したセグメントを変更できるようになりました。

私のアプリでは、基本的に、スクロールビューに埋め込まれたUISegmentedControlがあります。 UISegmentedControlは長すぎて画面にすべての値を表示できないため、コンテンツの幅がUISegmentedControlの長さである画面の幅であるスクロールビューを作成し、非表示のセグメントにアクセスするには、ユーザーがスワイプします「スクロールビュー」とセグメント化されたコントロールスライド。

これはiOS 13まで完全に機能し、現在、ユーザーはセグメント化されたコントロールをドラッグしているときに水平背景のスクロールビューをスクロールできません。これは、スクロールビュースクロール認識機能がジェスチャーを選択するための新しいスクロールビュースワイプによってオーバーライドされているためです。

UISegmentedControlとそのすべてのサブビューのすべてのジェスチャー認識機能を再帰的に削除しようとしましたが、選択ジェスチャーを変更するためのスワイプは引き続き機能します...

ありがとう、問題が不明確な場合はお知らせください

7
user3492226

@Aystubの回答をアップグレードしました。 UITapGestureRecognigerにセグメントの選択のみを許可できます。

class NoSwipeSegmentedControl: UISegmentedControl {
        override func gestureRecognizerShouldBegin(_ gestureRecognizer: UIGestureRecognizer) -> Bool {

            if(gestureRecognizer.isKind(of: UITapGestureRecognizer.self)){
                return false
            }else{
                return true
            }

       }
}
0
mazend