2017-02-20 77 views
1

我想要當我的項目有圖庫獲取圖像URL並創建imageView與URL數據並添加此圖像視圖滾動視圖子視圖,並滾動視圖子視圖之間滾動。我的imageView數組有6個imageView,但圖像視圖圖像是空的,我的滾動視圖分頁工作正常,但只有一個圖像顯示在滾動視圖中其他圖像視圖圖像是白色背景。有我的代碼。從URL下載圖片並添加到滾動視圖子視圖

在獲取數據從web服務創建網址的數組,然後調用getImageData mehtod

func getImageData() { 

    self.defaultImage.isHidden = true 
    self.scrollView.isHidden = false 
    scrollView.isPagingEnabled = true 
    scrollView.showsVerticalScrollIndicator = true 
    scrollView.showsHorizontalScrollIndicator = false 
    scrollView.isScrollEnabled = true 
    self.scrollView.willRemoveSubview(defaultImage) 
    for i in gallaryURL { 
     self.downloadImage(string: i)  
    } 
    Timer.scheduledTimer(timeInterval: 3, target: self, selector: #selector(moveToNextPage), userInfo: nil, repeats: true) 

} 

func downloadImage(string: String) { 

    let imageUrl:URL = URL(string: string)! 
    // Start background thread so that image loading does not make app unresponsive 
    DispatchQueue.global(qos: .background).async { 
    let imageData:NSData = NSData(contentsOf: imageUrl)! 
    let myImageView = UIImageView(frame: CGRect(x:self.scrollWith!*2, y:0,width:self.scrollWith!, height:self.scrollHeight!)) 
    myImageView.backgroundColor = #colorLiteral(red: 0.9568627477, green: 0.6588235497, blue: 0.5450980663, alpha: 1) 
    let image = UIImage(data: imageData as Data) 
    myImageView.image = image 
    // When from background thread, UI needs to be updated on main_queue 
    DispatchQueue.main.async { 
    self.allImage.append(myImageView) 
    self.scrollView.addSubview(myImageView) 
    self.scrollView.contentSize = CGSize(width:self.scrollView.frame.width * 4, height:self.scrollView.frame.height) 
     } 
    } 

func moveToNextPage() { 

    let pageWidth:CGFloat = self.scrollView.frame.width 
    let maxWidth:CGFloat = pageWidth * 4 
    let contentOffset:CGFloat = self.scrollView.contentOffset.x 
    var slideToX = contentOffset + pageWidth 
    if contentOffset + pageWidth == maxWidth{ 
     slideToX = 0 
    } 
    self.scrollView.scrollRectToVisible(CGRect(x:slideToX, y:0, width:pageWidth, height:self.scrollView.frame.height), animated: true) 
} 

如何解決這個問題呢?

+0

可以附上你的項目 –

+0

這是一個非常大的項目,這個小部分,我將以這個部分爲例。 – ava

+0

ok附上示例項目 –

回答

0

我覺得你的問題是在這條線:

let myImageView = UIImageView(frame: CGRect(x:self.scrollWith!*2, y:0,width:self.scrollWith!, height:self.scrollHeight!)) 

你讓所有的ImageView的是一樣的potsition X,它們是重疊的位置self.scrollWith!*2

你可以像下面的downloadImage功能添加一個名爲財產以後像indexposition參數:

func downloadImage(string: String, index: Int) { 

    let imageUrl:URL = URL(string: string)! 
    // Start background thread so that image loading does not make app unresponsive 
    DispatchQueue.global(qos: .background).async { 

    let imageData:NSData = NSData(contentsOf: imageUrl)! 

    let myImageView = UIImageView(frame: CGRect(x:self.scrollWith!*index, y:0,width:self.scrollWith!, height:self.scrollHeight!)) 
    myImageView.backgroundColor = #colorLiteral(red: 0.9568627477, green: 0.6588235497, blue: 0.5450980663, alpha: 1) 

    let image = UIImage(data: imageData as Data) 
    myImageView.image = image 

    // When from background thread, UI needs to be updated on main_queue 
    DispatchQueue.main.async { 

     self.allImage.append(myImageView) 

     self.scrollView.addSubview(myImageView) 


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

    } 
} 

然後你可以使用for循環像下面這樣:

func getImageData() { 

    self.defaultImage.isHidden = true 
    self.scrollView.isHidden = false 
    scrollView.isPagingEnabled = true 
    scrollView.showsVerticalScrollIndicator = true 
    scrollView.showsHorizontalScrollIndicator = false 
    scrollView.isScrollEnabled = true 
    self.scrollView.willRemoveSubview(defaultImage) 

    for i in 0..<gallaryURL.count { 

     self.downloadImage(string: gallaryURL[i], index: i) 

    } 

    Timer.scheduledTimer(timeInterval: 3, target: self, selector: #selector(moveToNextPage), userInfo: nil, repeats: true) 

} 

希望該解決方案可以爲您工作。

+0

這使得它更好,但基本上這個問題沒有解決。當有5張照片時,只顯示4張照片,而我無法向下滾動查看最後一張照片。 – ava

+0

您的示例代碼有錯誤,如響應json是0, ,但您在'ScrollPagingViewController.swift'中的'125行'處使用此代碼: 'let arrJSON = response.result as! [字符串:任意]' 請提供正確的樣本 – Leo

相關問題