UIScrollView
がスクロールしているかどうかを検出します。UIScrollViewがスクロールしているかどうかを検出します。
すなわち
BOOL isScrolling = myscrollview.scrolling;
どのように私はこれを実装するに行きますか? setContentOffset:animated:
を使用した場合、.dragging
および.decelerating
は適用されません。
UIScrollView
がスクロールしているかどうかを検出します。UIScrollViewがスクロールしているかどうかを検出します。
すなわち
BOOL isScrolling = myscrollview.scrolling;
どのように私はこれを実装するに行きますか? setContentOffset:animated:
を使用した場合、.dragging
および.decelerating
は適用されません。
私は通常、scrollViewWillBeginDragging:
とscrollViewDidEndDragging:willDecelerate:
イベントでブール変数を設定します。
ドラッグを使用していません...アニメーション – Jonny
'setContentOffset:animated:'によって起動されたアニメーションが終了したときに呼び出される 'scrollViewDidEndScrollingAnimation:'を実装することもできます。 – Guillaume
@Guillaume:私はそれをテストしましたアニメーションを使用すると機能します。 'setContentOffset'を呼び出すと同時に設定されるプロパティを使用していますか?または、スクロールが開始されたときにもう一度チェックする可能性はありますか?アニメーションを使わない可能性もありますか? – testing
これはそれを行うの少し危険な方法かもしれないが、私は前に私のコードでそれを使用しました、それはまだ私を失敗していません。 :)「self.contentOffset」に加え
#import <QuartzCore/QuartzCore.h>
---
BOOL isScrolling = [scrollView.layer animationForKey:@"bounds"] != nil;
UIScrollViewのオフセットは、それが低レベルのビットより便利なので、私は推測する(同様のUIViewの「bounds.origin」プロパティに格納されます。コード)。 [setContentOffset:animated:]を呼び出すと、それはUIScrollViewにCABasicAnimationとして渡され、「境界」プロパティを操作します。
このチェックは、scrollView自体の形状がアニメーション化されている場合にtrueを返します。この場合、アニメーション([CAAnimation toValue])から境界オブジェクトを実際に引き出し、手動で比較して「起点」自体が全く変化していないかどうかを確認する必要があります。
これは最も洗練された解決策ではありませんが、私は可能な限りデリゲートを使用する必要はありません。特に問題のクラスがUIScrollViewサブクラスである場合:)
- (void)scrollViewDidEndScrollingAnimation:(UIScrollView *)scrollView;
フラグを使用して現在のスクロール状態を保存しますか? それはsetContentOffset:animated:問題を解決するだけでした。
「スクロール」は単なる効果であり、スクロールビューを「スクロール」させる多くの方法があります。コンテンツのオフセットを連続して設定します。だからこの質問には答えがありません。
ない非常にきれいな解決策..しかし、最も信頼できるものでなければならない:
var isScrolling = false
func scrollViewWillBeginDragging(_ scrollView: UIScrollView) {
isScrolling = true
}
func scrollViewDidEndDragging(_ scrollView: UIScrollView, willDecelerate decelerate: Bool) {
if !decelerate { scrollViewDidEndScrolling(scrollView) }
}
func scrollViewDidEndDecelerating(_ scrollView: UIScrollView) {
scrollViewDidEndScrolling(scrollView)
}
func scrollViewDidEndScrollingAnimation(_ scrollView: UIScrollView) {
scrollViewDidEndScrolling(scrollView)
}
func scrollViewDidEndScrolling(_ scrollView: UIScrollView) {
isScrolling = false
}
いかが 'scrollViewDidScroll'のデリゲートメソッド? – iDev
それは「いつ」にしか答えません。 – Jonny
少し複雑ですが、この情報が必要な理由に応じて、メイン実行ループのモードを見ることができます。例えば、スクロール・ビューが現在スクロールしていない、またはドラッグされていない場合、メイン・ループはおそらく 'NSDefaultRunLoopMode'にあります。いずれかのスクロール・ビューがスクロール/ドラッグされている場合、 'NSRunLoopCommonModes'の一部である別のモードになります。例えば、何かをするためにスクロールを待つ場合は、 'CFRunLoopPerformBlock(CFRunLoopGetMain()、kCFRunLoopDefaultMode、block);' – Guillaume