簡體   English   中英

在Swift中使用UIScrollView進行無限循環滾動

[英]Infinite loop scrolling using UIScrollView in Swift

我正在嘗試制作無限循環圖庫應用程序。 我通過設置UIScrollView來實現它,我在其中插入了UIImageViews。 我能夠加載4個圖像並在它們之間滑動,但我遇到的問題是如何實現無限滾動,以便在最后一個圖像之后,第一個圖像出現並相反。

因為我是Swift的新手,我不知道如何處理這個問題,也不知道從哪里開始。 我將非常感謝有關如何解決此問題的任何建議,示例或鏈接。

提前致謝!

這是我的代碼的和平:

class FirstViewController: UIViewController {

@IBOutlet weak var scrollView: UIScrollView!

override func viewDidLoad() {
    super.viewDidLoad()

    self.scrollView.frame = CGRectMake(0, 0, self.view.frame.width, self.view.frame.height)

    let scrollViewWidth: CGFloat = self.scrollView.frame.width
    let scrollViewHeight: CGFloat = self.scrollView.frame.height

    let numPics: Int = 3

    let imgOne = UIImageView()
    let imgTwo = UIImageView()
    let imgThree = UIImageView()
    let imgFour = UIImageView()

    var arrPics = [imgOne, imgTwo, imgThree, imgFour]
    var arrSlide = ["slide1.png", "slide2.png", "slide3.png", "slide4.png"]

    for i in 0...numPics {

        arrPics[i] = UIImageView(frame: CGRectMake(0,scrollViewHeight * CGFloat(i),scrollViewWidth, scrollViewHeight))

        arrPics[i].image = UIImage(named: arrSlide[i])

        self.scrollView.addSubview(arrPics[i])

        }

    self.scrollView.contentSize = CGSizeMake(self.scrollView.frame.width, self.scrollView.frame.height*4)

}   

不要使用滾動視圖,而是使用表視圖或集合視圖。

這兩個類的代表都想要你的細胞計數。 然后給代表們一個瘋狂數量的單元格,這個數字如此之高,以至於任何人都不可能滾動到達終點。 像9999999細胞的東西。 這對於這樣的類來說沒有問題,因為在后台實現中它們不會創建這么多的單元格,而只是最大化可以在屏幕上同時可見的單元格數量。 事實上,這些細胞可以重復使用。 因此當細胞從底部掉出時,這些細胞將在頂部重復使用,反之亦然。 最后一點是:將起點設置在如此高的數字中間,如5555555.我認為如果你不打算像他們那樣實現完整的圖像回收算法,這是最簡單的解決方案。

@IBOutlet weak var scrollView: UIScrollView!
var scrollViewHeight: CGFloat!
let numPics: Int = 4


override func viewDidLoad()
{
  super.viewDidLoad()

  scrollView.delegate = self
  self.scrollView.frame = CGRectMake(0, 0, self.view.frame.width, self.view.frame.height)

  let scrollViewWidth: CGFloat = self.scrollView.frame.width
  scrollViewHeight = self.scrollView.frame.height



  let imgOne = UIImageView()
  let imgTwo = UIImageView()
  let imgThree = UIImageView()
  let imgFour = UIImageView()
  let imgFive = UIImageView()


  var arrPics = [imgOne, imgTwo, imgThree, imgFour,imgFive]
  var arrSlide = ["slide1.jpeg", "slide1.jpeg", "slide1.jpeg", "slide1.jpeg","slide1.jpeg"]

  for i in 0...numPics {

     arrPics[i] = UIImageView(frame: CGRectMake(0,scrollViewHeight * CGFloat(i),scrollViewWidth, scrollViewHeight))

     arrPics[i].image = UIImage(named: arrSlide[i])

     self.scrollView.addSubview(arrPics[i])

   }

  self.scrollView.contentSize = CGSizeMake(self.scrollView.frame.width, self.scrollView.frame.height * CGFloat(numPics+1))

}

 func scrollViewDidScroll(scrollView: UIScrollView)
 {
     scrollViewHeight = self.scrollView.frame.height
    self.scrollView.contentSize = CGSizeMake(self.scrollView.frame.width, self.scrollView.frame.height * scrollViewHeight )
 }

這將解決您的問題,只需調整控制器進入垂直幻燈片視圖並按照您的意願加載資源。

鏈接

使用Timer可以使用如下的無限滾動

func showview() {

    if(videosimageslider.isEmpty) {
        // print("Empty Array")
    } else {
        // print("Not Empty ")
        // print(videosimageslider.count)

        for var index=0; index<videosimageslider.count; index++ {
            if let url = NSURL(string: videosimageslider[index]) {
                if let data = NSData(contentsOfURL: url){
                    if let imageUrl = UIImage(data: data) {
                        let  myimageview:UIImageView = UIImageView()
                        // myimageview.image = imageUrl
                        let block: SDWebImageCompletionBlock! = {(image: UIImage!, error: NSError!, cacheType: SDImageCacheType, imageUrl: NSURL!) -> Void in
                            //println(self)
                        }

                        // let url = NSURL(string: "http://yikaobang-test.u.qiniudn.com/FnZTPYbldNXZi7cQ5EJHmKkRDTkj")
                        myimageview.sd_setImageWithURL(url, completed: block)
                        myimageview.frame.size.width = imagewidth
                        myimageview.frame.size.height = imageheight
                        myimageview.contentMode = UIViewContentMode.ScaleToFill
                        myimageview.frame.origin.x = xscrollpos
                        myimageview.frame.origin.y = 5
                        scrollview!.addSubview(myimageview)
                        xscrollpos += imagewidth
                        scrollviewcontentSize += imagewidth
                        scrollview.contentSize = CGSize(width: scrollviewcontentSize, height: imageheight)
                    }
                }
            }
        }
        scrollingTimer = NSTimer.scheduledTimerWithTimeInterval(0.5, target: self, selector: "newStartScrolling", userInfo: nil, repeats: true)
        scrollingTimer.fire()
    }
}

// call the timer function //
func newStartScrolling() {
    var currentOffset = scrollview.contentOffset
    currentOffset = CGPointMake(currentOffset.x+3, currentOffset.y )

    if(currentOffset.x < scrollview.contentSize.width - 500) {
        scrollview.setContentOffset(currentOffset, animated: false)
        currentOffset = CGPointMake(0, currentOffset.y )
        //scrollview.contentSize = CGSize(width: 0, height: 0);
    } else {
        scrollingTimer.invalidate()
        showview()
    }
}

暫無
暫無

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

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