[解決済み] UIScrollViewの水平ページングをMobile Safariのタブのようにする。
質問
モバイルSafariでは、下部にページコントロールがあるUIScrollViewのような水平ページングビューに入ることで、ページを切り替えることができます。
私は、水平方向にスクロール可能な UIScrollView が次のビューのコンテンツの一部を表示する、この特定の動作を再現しようとしています。
Apple が提供する例です。PageControl は、水平ページングに UIScrollView を使用する方法を示していますが、すべてのビューが画面幅全体を占めています。
モバイルSafariが行うように、UIScrollViewが次のビューのいくつかのコンテンツを表示するようにするにはどうしたらよいでしょうか。
どのように解決するのですか?
A
UIScrollView
は、ページングを有効にすると、フレームの幅 (または高さ) の倍数で停止します。 ですから、最初のステップは、ページの幅を決めることです。 その幅を
UIScrollView
. 次に、サブビューのサイズを必要な大きさに設定し、その中心を UIScrollView
の幅の倍数に基づいて中心を設定します。
次に、他のページも見たいので、もちろん
clipsToBounds
を
NO
に変更しました。 の範囲外でドラッグを開始したときにスクロールするようにすることです。
UIScrollView
のフレームの範囲外でユーザーがドラッグを開始したときにスクロールするようにすることです。 私の解決策は(ごく最近これをしなければならなかったとき)次のようなものでした。
を作成します。
UIView
のサブクラス(つまり
ClipView
) を含むことになります。
UIScrollView
とそのサブビューを含むものです。 基本的に、これは
UIScrollView
が持っていると想定されるフレームを持つ必要があります。 このように
UIScrollView
の中央に
ClipView
. 必ず
ClipView
's
clipsToBounds
に設定されているのは
YES
に設定されます。 また
ClipView
への参照が必要です。
UIScrollView
.
最後のステップは
- (UIView *)hitTest:withEvent:
の内部で
ClipView
.
- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event {
return [self pointInside:point withEvent:event] ? scrollView : nil;
}
これは基本的に、タッチエリアである
UIScrollView
のタッチエリアをその親のビューのフレームに拡大します。
もう一つの方法は、サブクラス
UIScrollView
を継承し、その
- (BOOL)pointInside:(CGPoint) point withEvent:(UIEvent *) event
メソッドをオーバーライドしても、クリッピングを行うコンテナビューは必要であり、また、いつ
YES
を返すタイミングを決めるのは難しいかもしれません。
UIScrollView
のフレームのみに基づいています。
NOTE また、ジュリ・パカステの hitTest:withEvent:モディフィケーションを参照してください。 を参照してください。
関連
-
[解決済み] performSelectorのセレクタが不明なため、リークが発生する可能性があります。
-
[解決済み] 奇妙な不要なXcodeログを隠す
-
[解決済み] iOS 8 UITableViewのセパレータインセット0が機能しない件
-
[解決済み] Xcode 6のバグ:Interface Builderファイル内の不明なクラス
-
[解決済み] UITextFieldのテキスト変更イベント
-
[解決済み] コードサインエラーです。期限切れのプロファイルを削除した後、プロビジョニングプロファイルが見つからない
-
[解決済み] iOS 11、Apple TV 4Kなどを搭載したXcode 9でワイヤレスデバッグを行う方法とは?
-
[解決済み] ぼかしの入ったオーバーレイビューの作成
-
[解決済み】UIScrollView Scrollable Content Size Ambiguity
-
[解決済み】Xcode 6でAutoLayout制約を使用してアスペクトフィットの動作をエミュレートする
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] iOSまたはmacOSで、インターネット接続が有効かどうかを確認するにはどうすればよいですか?
-
[解決済み] Objective-Cでデリゲートを作成するにはどうしたらいいですか?
-
[解決済み] UITextViewのプレースホルダー
-
[解決済み] Objective-Cで文字列が空かどうかをテストするにはどうすればよいですか?
-
[解決済み] Objective-CでNSNotificationCenterを通してメッセージを送受信する?
-
[解決済み] UIButtonのタイトルを左揃えにするにはどうしたらよいですか?
-
[解決済み] SwiftでiOSキーボードを任意の場所でタッチして閉じる
-
[解決済み] Swift で HTTP リクエストを行うにはどうしたらいいですか?
-
[解決済み] UIImageのサイズを変更する最も簡単な方法?
-
[解決済み] Swiftの配列を文字列に変換するには?