簡體   English   中英

Swift-UIScrollView跳轉到第一頁而不是滾動到它

[英]Swift - UIScrollView Jumps to first page instead scrolling to it

有沒有一種方法可以將圓形滾動添加到UIScrollView? 例如,如果滾動到達最后一頁,則第一頁應該是下一頁,如果向后滾動到第一頁,則最后一頁應該是下一頁。

我一直在嘗試使用scrollViewDidScroll函數,但是,當滾動到達最后一頁時,視圖跳回到第一個視圖,而不是滾動到它或在它旁邊添加它。

我的代碼是:

func scrollViewDidScroll(scrollView: UIScrollView) {

        if (scrollView.contentOffset.x > scrollView.frame.size.width){
            scrollView.setContentOffset(CGPointZero, animated: true)
            //scrollView.scrollRectToVisible(CGRectMake(0, 0, 1, 1), animated: false)


        }

        if (scrollView.contentOffset.x < 0){
            scrollView.setContentOffset(CGPointMake(scrollView.frame.size.width,0.0), animated: true)
        }
    } 

任何想法如何做到這一點?

您將需要在后勤工作中做少量的工作,但這並不太麻煩。

似乎將內容的第一頁顯示在最后一頁的右側,這並不是滾動視圖本來可以執行的操作。 要解決此問題,您需要在右側增加一個屏幕來擴展contentSize並復制您的內容。

這將使您的內容區域覆蓋[0,最后一頁末尾]到[0,最后一頁末尾+ 1)。 但是,您仍然希望將滾動限制為[0,最后一頁],將[-1,0]范圍內的偏移量映射為[最后一頁,最后一頁+ 1]。 所以:

func scrollViewDidScroll(scrollView: UIScrollView) {

    let realContentWidth = scrollView.contentSize.width - scrollView.bounds.size.width

    scrollView.contentOffset.x = ((scrollView.contentOffset.x % realContentWidth) 
                                                    + realContentWidth) % realContentWidth;
} 

該模的邏輯是:

  • 如果您以內容偏移量為正數開頭,則內部的%會將其映射到正確的范圍,而外部的將導致+為無操作;
  • 如果以內容偏移量為負數開頭,則內部%將使其仍為負數,但在(-realContentWidth,0]中,因此+將其移至相應的正數范圍,外部%為無操作。

(對Objective-C'ers的快速觀察: %是在Swift中的浮點數上定義的;在Objective-C中,您應該在其位置使用fmod ,因為%僅在其中為積分算術定義了)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM