[解決済み] UIScrollViewでスクロールの方向を見つける?
2022-04-23 22:53:38
質問
私は
UIScrollView
で、水平方向のスクロールのみが許可されており、ユーザーがどちらの方向(左、右)にスクロールしたかを知りたいです。私が行ったのは
UIScrollView
をオーバーライドし
touchesMoved
メソッドを使用します。
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{
[super touchesMoved:touches withEvent:event];
UITouch *touch = [touches anyObject];
float now = [touch locationInView:self].x;
float before = [touch previousLocationInView:self].x;
NSLog(@"%f %f", before, now);
if (now > before){
right = NO;
NSLog(@"LEFT");
}
else{
right = YES;
NSLog(@"RIGHT");
}
}
でも、このメソッドは移動しても全く呼ばれないことがあるんです。どうなんでしょう?
解決方法は?
方向を決定するのは非常に簡単ですが、ジェスチャーの間に方向が何度か変わる可能性があることに注意してください。たとえば、ページングをオンにしたスクロールビューで、ユーザーがスワイプして次のページに移動する場合、最初の方向は右向きかもしれませんが、バウンスをオンにしている場合は、まったく方向が決まらず、次に左向きになることがあります。
方向を決定するために
UIScrollView scrollViewDidScroll
のデリゲートです。このサンプルでは
lastContentOffset
これは、現在のコンテンツオフセットを以前のものと比較するために使用します。もしそれが大きければ、scrollViewは右にスクロールしていることになる。もし小さければ、scrollViewは左にスクロールしています。
// somewhere in the private class extension
@property (nonatomic, assign) CGFloat lastContentOffset;
// somewhere in the class implementation
- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
ScrollDirection scrollDirection;
if (self.lastContentOffset > scrollView.contentOffset.x) {
scrollDirection = ScrollDirectionRight;
} else if (self.lastContentOffset < scrollView.contentOffset.x) {
scrollDirection = ScrollDirectionLeft;
}
self.lastContentOffset = scrollView.contentOffset.x;
// do whatever you need to with scrollDirection here.
}
方向性を定義するために、以下のenumを使っています。最初の値を ScrollDirectionNone に設定すると、変数の初期化時にその方向がデフォルトになるという利点もあります。
typedef NS_ENUM(NSInteger, ScrollDirection) {
ScrollDirectionNone,
ScrollDirectionRight,
ScrollDirectionLeft,
ScrollDirectionUp,
ScrollDirectionDown,
ScrollDirectionCrazy,
};
関連
-
[解決済み] キーボードがあるときに、UITextFieldを編集開始時に上に移動させるには?
-
[解決済み] UITableViewの選択を無効にするにはどうすればよいですか?
-
[解決済み] iOSの配布証明書の正しい更新方法
-
[解決済み] UIImage。リサイズ、そしてクロップ
-
[解決済み] UITextFieldのキーボードの種類をプログラムで変更する
-
[解決済み] レビュー待ちの状態でバイナリを拒否する(バイナリ拒否ボタンが見つからない)
-
[解決済み] 静的ライブラリのObjective-Cカテゴリ
-
[解決済み] Push Notificationのアラートテキストは何文字まで可能ですか?
-
[解決済み] iOSアプリでターゲットのバージョン/ビルド番号をプログラム的に表示するには?
-
[解決済み] iPhone 5 CSSメディアクエリ
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】@try - Objective-Cのcatchブロック
-
[解決済み] iPhoneのシミュレータに.ipaファイルをインストールする方法は?
-
[解決済み] NSDictionaryをNSDataに、またはNSDataをNSDictionaryに変換するにはどうすればよいですか?
-
[解決済み] Xcode 4.2 - '...' の宣言は、この関数の外では表示されません 警告
-
[解決済み] iPhoneでMonoTouchは禁止になったのか?[クローズド]
-
[解決済み] UISearchDisplayController/UISearchBarでNSFetchedResultsController(CoreData)をフィルタリングする方法
-
[解決済み] リンカーフラグ -ObjC は何をするのですか?
-
[解決済み] iPhoneシミュレーター - 低速接続をシミュレートする?
-
[解決済み] Xcodeは私のiOSデバイスを見ませんが、iTunesは見ます。
-
[解決済み] Objective-C Split()?