簡體   English   中英

滾動查看未居中的圖像

[英]scrollView images not centered

我試圖用UIPageControl創建一個scrollView。 這可以正常工作,但是問題是圖像不會在scrollView的每個頁面中居中。 它向右對齊。 如何始終將圖像居中?

圖片說明:

http://i.stack.imgur.com/In6t7.png

碼:

viewDidLoad

self.pageControl = UIPageControl()
self.pageControl?.frame = CGRectZero
self.pageControl?.currentPage = 0
self.pageControl?.numberOfPages = self.imageArray!.count
self.pageControl?.tintColor = UIColor.whiteColor()
self.pageControl?.userInteractionEnabled = false
self.navigationItem.titleView = self.pageControl?

for var i = 0; i<self.imageArray?.count; i++ {
    self.pageViews.append(nil)
}

let pagesScrollViewSize = self.scrollView.frame.size
self.scrollView.contentSize = CGSizeMake(pagesScrollViewSize.width * CGFloat(self.imageArray!.count), pagesScrollViewSize.height)


self.loadVisiblePages()

其余方法

func loadPage(page: Int) {

    if page < 0 || page >= self.imageArray!.count {
        // If it's outside the range of what you have to display, then do nothing
        return
    }

    // 1
    if let pageView = pageViews[page] {
        // Do nothing. The view is already loaded.
    } else {
        // 2
        let newPageView = UIImageView(image: self.imageArray![page] as UIImage)
        var frame = scrollView.bounds
        frame.origin.x = (frame.size.width * CGFloat(page))
        frame.origin.y = 0.0

        // 3

        newPageView.contentMode = .ScaleAspectFit
        newPageView.frame = frame
        scrollView.addSubview(newPageView)
        newPageView.backgroundColor = UIColor.blackColor()

        // 4
        pageViews[page] = newPageView
    }
}

func purgePage(page: Int) {

    if page < 0 || page >= self.imageArray!.count {
        // If it's outside the range of what you have to display, then do nothing
        return
    }

    // Remove a page from the scroll view and reset the container array
    if let pageView = pageViews[page] {
        pageView.removeFromSuperview()
        pageViews[page] = nil
    }

}

func loadVisiblePages() {

    // First, determine which page is currently visible
    let pageWidth = scrollView.frame.size.width
    let page = Int(floor((scrollView.contentOffset.x * 2.0 + pageWidth) / (pageWidth * 2.0)))

    // Update the page control
    pageControl?.currentPage = page

    // Work out which pages you want to load
    let firstPage = page - 1
    let lastPage = page + 1


    // Purge anything before the first page
    for var index = 0; index < firstPage; ++index {
        purgePage(index)
    }

    // Load pages in our range
    for var index = firstPage; index <= lastPage; ++index {
        loadPage(index)
    }

    // Purge anything after the last page
    for var index = lastPage+1; index < self.imageArray!.count; ++index {
        purgePage(index)
    }
}


func scrollViewDidScroll(scrollView: UIScrollView!) {
    // Load the pages that are now on screen
    loadVisiblePages()
}

我在這里發現您使用let來聲明一個常量UIImageView ,我認為您應該使用var

let newPageView = UIImageView(image: self.imageArray![page] as UIImage)

其實,除此之外,我還能發現任何問題,我認為您之所以無法將圖片設置為居中的原因是因為此聲明之后的所有操作均不起作用,因此您無法設置正確的框架,正確的contentMode到UIImageView

定位scrollView的圖像視圖時,如果使用center.x而不是origin.x ,可能會更容易。

在這種情況下,我將使用的公式:

centerX = pageNumber * 320 + 160

所以像這樣:

myImageView.center = CGPointMake(pageNumber * 320 + 160, 0);

通過我的公式,我得到以下結果:

page 0: 0 * 320 + 160 = 160
page 1: 1 * 320 + 160 = 480
page 2: 2 * 320 + 160 = 800
page 3: 3 * 320 + 160 = 1120

您可以看到每個頁面的偏移量為320(此處假設iPhone屏幕尺寸)。 您顯然可以使用它代替:

self.view.bounds.size.width 

這里的320僅用於說明目的。

您的方法

好的,讓我們遍歷代碼:

var frame = scrollView.bounds
frame.origin.x = (frame.size.width * CGFloat(page))
frame.origin.y = 0.0
  1. 第一次,如果頁面從0開始,origin.x將為0,scrollView的寬度保持為320。
  2. 第二次,origin.x將為320 * 1(此處的頁面== 1),scrollView的寬度將變為640,因為我假設有2個imageViews的寬度為320。
  3. 第三次,origin.x將為640 * 2 = 1280,scrollView的寬度現在為1600(origin.x = 1280 + 320 imageView寬度)

您看到數字如何不斷增加,而不是保持不變的320嗎?

暫無
暫無

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

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