使用UIScrollView分页

莫多西

我正在尝试使用UIScrollView和页面控件显示多个图像,请考虑一下App Store上的应用程序的屏幕截图。但是由于某种原因,我UIScrollView没有滚动。我检查了一下,UISCrollView'scontentSize的宽度大于UIScrollView's宽度。可能还需要注意的是,我将页面控件放在中UIScrollView,以便它显示在图片的顶部。我的代码如下:

import UIKit

class ItemDetailViewController: UIViewController, UIScrollViewDelegate {

@IBOutlet weak var scrollView: UIScrollView!
@IBOutlet weak var pageControl: UIPageControl!


var itemSelected: Item!
var pageViews: [UIImageView?] = []
var pageCount: Int!

override func viewDidLoad() {
    super.viewDidLoad()

    // Do any additional setup after loading the view.

    pageCount = itemSelected.images.count
    pageControl.currentPage = 0
    pageControl.numberOfPages = pageCount

    for _ in 0..<pageCount {
        pageViews.append(nil)
    }

    scrollView.frame.size = CGSizeMake(view.frame.width, view.frame.height/2.0)
    let pageSize = scrollView.frame.size
    scrollView.contentSize = CGSizeMake(pageSize.width * CGFloat(pageCount), pageSize.height)
    loadVisiblePages()
    scrollView.delegate = self
}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}

override func viewWillAppear(animated: Bool) {
    super.viewWillAppear(animated)
    tabBarController?.tabBar.hidden = true
}

override func viewWillDisappear(animated: Bool) {
    super.viewDidDisappear(animated)
    tabBarController?.tabBar.hidden = false
}


// MARK: - Helper Functions

func loadPage(page: Int){
    if page < 0 || page >= pageCount {
        // page outside of range, do nothing
        return
    }

    if let pageView = pageViews[page] {
        // page already loaded, do nothing
        return
    } else {
        var frame = scrollView.bounds
        frame.origin.x = frame.size.width * CGFloat(page)
        frame.origin.y = 0.0

        let newPageView = UIImageView(image: itemSelected.images[page])
        newPageView.contentMode = .ScaleToFill
        newPageView.frame = frame
        scrollView.addSubview(newPageView)

        pageViews[page] = newPageView
    }


}

func purgePage(page: Int){
    if page < 0 || page >= pageCount {
        // page outside of range, do nothing
        return
    }

    if let pageView = pageViews[page]{
        pageView.removeFromSuperview()
        pageViews[page] = nil
    }
}

func loadVisiblePages(){
    let pageWidth = scrollView.frame.size.width
    let page = Int(floor(scrollView.contentOffset.x * 2.0 + pageWidth)/(2.0 * pageWidth))

    pageControl.currentPage = page

    let firstPage = page - 1
    let lastPage = page + 1

    for var index = 0; index < firstPage; index++ {
        purgePage(index)
    }

    for index in firstPage ... lastPage {
        loadPage(index)
    }

    for var index = lastPage + 1; index < itemSelected.images.count; index++ {
        purgePage(index)
    }
}

// MARK: - Scroll View Delegate Methods

func scrollViewDidScroll(scrollView: UIScrollView) {
    loadVisiblePages()
}
}

是什么原因引起的?

康斯坦丁·克里扎诺夫斯基(Konstantin Kryzhanovsky)

更好的用法UIPageViewController是您只想显示图像。你可以在那里看到教程

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

使用“原型页面”分页UIScrollView

使用scrollViewWillEndDragging的自定义UIScrollView分页

使用UIView作为子视图的水平分页的UIScrollView

启用分页的UIPageViewController或UIScrollView =是

带有分页的UIScrollView的约束

什么定义了UIScrollView分页大小?

目标c中的UIScrollView分页

XCode自动布局无法与UIScrollView一起使用以进行水平分页

使用单个 ViewController 在带有分页的 UIScrollView 中添加多个 UICollectionView

UIView.animate与UIScrollView内的imageArray一起使用,但具有分页启用的效果

从首页返回到分页的UIScrollView的前面?

iPad和iPhone上的UIScrollView分页布局

缩放后调整uiscrollview的大小,以启用分页

UIImageViews无法在分页的UIScrollView中正确缩放

UIScrollView。如果contentOffset太大,则会出现分页的奇怪行为

UIScrollView从中心向左和向右分页

带有分页的UIScrollView的灵敏度/滚动速度

将图像添加到水平分页 UIScrollView

启用了具有内容插入的UIScrollView分页的功能很奇怪

在分页 UIScrollView 中获取可见的视图控制器

UIScrollView水平分页,例如Mobile Safari标签

以编程方式在 UIScrollview 中水平分页的 UITableView

UITextView在分页UIScrollView中滚动不起作用

具有动画完成处理程序的UIScrollView分页

UIScrollView如何使用decelerationRate?

使用UIScrollView自动布局

使用PageController循环UIScrollView

使用UIScrollView滚动UIImage

使用jQuery分页插件进行分页