我希望UIScrollView在快速掃描後快速滾動,like this。 雖然打開頁面時,滾動工作one page at a time。 當使用手指輕拂啓用分頁而不使用手勢識別器進行手動實現時,是否可以快速滾動?帶分頁的UIScrollView的靈敏度/滾動速度
22
A
回答
40
這很簡單,但是您必須自己實現分頁方面(這非常簡單)。你不需要手勢識別器。
斯威夫特
首先,調整的UIScrollView減速率:
scrollView.decelerationRate = UIScrollViewDecelerationRateFast
假設我們有內容的陣列 - 姑且稱之爲yourPagesArray
。在您的UIScrollViewDelegate,實現以下方法:
func scrollViewWillEndDragging(_ scrollView: UIScrollView, withVelocity velocity: CGPoint, targetContentOffset: UnsafeMutablePointer<CGPoint>)
{
//This is the index of the "page" that we will be landing at
let nearestIndex = Int(CGFloat(targetContentOffset.pointee.x)/scrollView.bounds.size.width + 0.5)
//Just to make sure we don't scroll past your content
let clampedIndex = max(min(nearestIndex, yourPagesArray.count - 1), 0)
//This is the actual x position in the scroll view
var xOffset = CGFloat(clampedIndex) * scrollView.bounds.size.width
//I've found that scroll views will "stick" unless this is done
xOffset = xOffset == 0.0 ? 1.0 : xOffset
//Tell the scroll view to land on our page
targetContentOffset.pointee.x = xOffset
}
您還需要實現以下的委託方法,來處理情況:用戶輕輕地提起他們的手指,而不會造成任何滾動減速:
(更新:你可能不需要這麼做了最新的iOS SDK下好像當出現零速度上面的委託方法現在被稱爲)
func scrollViewDidEndDragging(_ scrollView: UIScrollView, willDecelerate decelerate: Bool)
{
if !decelerate
{
let currentIndex = floor(scrollView.contentOffset.x/scrollView.bounds.size.width)
let offset = CGPoint(x: scrollView.bounds.size.width * currentIndex, y: 0)
scrollView.setContentOffset(offset, animated: true)
}
}
Objective-C的
設置你的減速率:
scrollView.decelerationRate = UIScrollViewDecelerationRateFast;
然後滾動視圖的委託實現:
- (void) scrollViewWillEndDragging:(UIScrollView *)scroll withVelocity:(CGPoint)velocity targetContentOffset:(inout CGPoint *)targetContentOffset
{
//This is the index of the "page" that we will be landing at
NSUInteger nearestIndex = (NSUInteger)(targetContentOffset->x/scrollView.bounds.size.width + 0.5f);
//Just to make sure we don't scroll past your content
nearestIndex = MAX(MIN(nearestIndex, yourPagesArray.count - 1), 0);
//This is the actual x position in the scroll view
CGFloat xOffset = nearestIndex * scrollView.bounds.size.width;
//I've found that scroll views will "stick" unless this is done
xOffset = xOffset==0?1:xOffset;
//Tell the scroll view to land on our page
*targetContentOffset = CGPointMake(xOffset, targetContentOffset->y);
}
- (void) scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate
{
if(!decelerate)
{
NSUInteger currentIndex = (NSUInteger)(scrollView.contentOffset.x/scrollView.bounds.size.width);
[scrollView setContentOffset:CGPointMake(scrollView.bounds.size.width * currentIndex, 0) animated:YES];
}
}
1
我認爲,我們可以設置scrollView.userInteractionEnabled = NO,當我們的手指觸摸它。然後,當動畫停止時,打開它,它適用於我。 希望它能幫助你。
-(void)scrollViewWillBeginDragging:(UIScrollView *)scrollView{
scrollView.userInteractionEnabled = NO;
}
// at the end of scroll animation, reset the boolean used when scrolls originate from the UIPageControl
- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView {
scrollView.userInteractionEnabled = YES;
}
相關問題
- 1. 調整UICollectionView滾動速度/靈敏度
- 2. 調整qooxdoo滾動速度/靈敏度
- 3. 你可以改變UIScrollView滾動的靈敏度嗎?
- 4. Jquery JScrollPane - 設置滾動速度/靈敏度
- 5. 更改UIScrollView滾動速度
- 6. iPhone加速度計靈敏度
- 7. 看看用戶滾動UIScrollView的速度
- 8. 如何降低UIScrollview的滾動速度?
- 9. iScroll的靈敏度
- 10. Pyomo靈敏度分析
- 11. BackgroundSubtractorMOG靈敏度
- 12. 滑動效果靈敏度
- 13. 滾動速度自動滾動速度
- 14. UIScrollview scrollViewShouldScrollToTop - 減慢滾動速度
- 15. 使UIScrollview分頁速度較慢
- 16. iPhone,iPods,iPad加速度計的靈敏度?
- 17. RecyclerView帶偏移量的滾動速度
- 18. 更改UIPageViewController的靈敏度
- 19. ScrollView的靈敏度iOS
- 20. 從TapkuLibrary降低Coverflow的滾動靈敏度
- 21. 加速度計在不同的傾斜度下有不同的靈敏度?
- 22. 更改UIScrollView拖動速度
- 23. 靈敏度分析和數據表
- 24. UIScrollView不滾動大高度
- 25. 調整SimpleOnGestureListener.onFling()靈敏度
- 26. 靈敏度列表錯誤
- 27. ds觸摸屏靈敏度
- 28. Android SeekBar觸摸靈敏度
- 29. iPhone滑塊靈敏度
- 30. DrawerLayout修改靈敏度?
有沒有找到解決方案呢? – Eric 2012-08-29 22:45:31
我希望有一個很好的解決方案。看起來有兩種實現方法:手動實現手勢識別器或手動實現分頁。 – UrK 2012-08-30 05:29:26
是的這可能是我在6個月前實施的。你可以手動做手勢識別器。 – JohnWhite 2012-09-17 08:43:44