2016-07-23 30 views
0

我想在iCarousel SlideShow上顯示來自網站的一些圖像。無法從網址向iCarousel顯示圖像

我從iCarousel獲得空幻燈片。

我初學者,我的應用程序偶然嘗試了許多代碼,但注意到發生

這裏是我的完整代碼:

import UIKit 

class ViewController: UIViewController , iCarouselDataSource, iCarouselDelegate { 

    @IBOutlet weak var imageView: UIImageView! 

    @IBOutlet weak var allimages: UIImageView! 

    internal var urll:NSURL! 

    @IBOutlet weak var carouselView: iCarousel! 

    var numbers = [Int]() 
    var urls = [String]() 


    func carousel(carousel: iCarousel, viewForItemAtIndex index: Int, reusingView view: UIView?) -> UIView { 
     let tempView = UIView(frame: CGRect(x: 0, y: 0, width: 300, height: 200)) 

     let images = UIButton(frame: CGRect(x: 0, y: 0, width: 300, height: 200)) 
     images.backgroundColor = UIColor.blueColor() 
     images.backgroundImageForState(.Normal) 
     images.backgroundRectForBounds(CGRect(x: 0, y: 0, width: 300, height: 200)) 
     tempView.addSubview(images) 

     let imageView = UIImageView(frame: CGRect(x: 0, y: 0, width: 200, height: 200)) 
     imageView.backgroundColor = UIColor.orangeColor() 


     for item in self.urls { 
      print (item) 

      let s = item 
      let url = NSURL(string: s) 
      let session = NSURLSession.sharedSession() 
      let task = session.downloadTaskWithURL(url!) 
      { 
       (url: NSURL?, res: NSURLResponse?, e: NSError?) in 
       let d = NSData(contentsOfURL: url!) 
       let image = UIImage(data: d!) 

       dispatch_async(dispatch_get_main_queue()) { 
        imageView.image = image 
       } 
      } 
      task.resume() 
     } 

    return images 

    } 




    func carousel(carousel: iCarousel, valueForOption option: iCarouselOption, withDefault value: CGFloat) -> CGFloat { 
     if option == iCarouselOption.Spacing { 
      return value * 1.1 
     } 
     return value 
    } 

    override func awakeFromNib() { 
     super.awakeFromNib() 
     numbers = [1,2,3,4] 
    } 

    func numberOfItemsInCarousel(carousel: iCarousel) -> Int { 
     return numbers.count 
    } 

    //============================================================== 
    override func viewDidLoad() { 






     carouselView.type = .Rotary 
     carouselView.autoscroll = 0.4 
//  let defaults = NSUserDefaults.standardUserDefaults() 



     urll = NSURL(string: "http://xxxxxxxxx.com/api/?slider=uij6sdnb") 

     let session = NSURLSession.sharedSession() 
     let task = session.dataTaskWithURL(urll) {(NSData, response, error) -> Void in 
      do { 
       let records = try NSJSONSerialization.JSONObjectWithData(NSData!, options: NSJSONReadingOptions.MutableContainers) as! NSArray 


       for record in records { 
        let urlid = Int(record["slide_id"] as! String) 
        let urimage = record["slide_url"] as! String 


      print(urlid) 
        print(urimage) 
        self.urls = [urimage] 
//     print(self.urls.count) 
           } 
      } 
      catch { 
       print("Json Error") 

      } 
     } 


     task.resume() 

任何幫助將不勝感激。

回答

1

這是我的完整代碼。

但正如你看到它的4個圖像。

對於或多或少的圖像,您可以輕鬆應用這些更改。

我添加了icrousel來自jared Davinson Youtube頻道。

享受。

// 
// ViewController.swift 
// parniapharmed 
// 
// Created by Alfredo Uzumaki on 2016 AP. 
// Copyright © 2016 AP Alfredo Uzumaki. All rights reserved. 
// 

import UIKit 
import SystemConfiguration // for checking internet connection 


class ViewController: UIViewController { // if you had any problem. command this line and uncommand the below line ! 

// class ViewController: UIViewController , iCarouselDataSource, iCarouselDelegate { 



@IBOutlet weak var allimages: UIImageView! 

internal var urll:NSURL! 

@IBOutlet weak var carouselView: iCarousel! 

@IBOutlet weak var img1: UIImageView! 
@IBOutlet weak var img2: UIImageView! 
@IBOutlet weak var img3: UIImageView! 
@IBOutlet weak var img4: UIImageView! 

@IBOutlet weak var allimagetop: UIView! 

internal var imageNinja:String = "" 

internal var hasInternet:Bool! // for checking internet connection 

var numbers = [Int]() 
var urls = [String]() 

internal var urimage = [String]() 

internal var image1:String = "" 
internal var image2:String = "" 
internal var image3:String = "" 
internal var image4:String = "" 

internal var imageArray: [UIImage] = [] 


func carousel(carousel: iCarousel, viewForItemAtIndex index: Int, reusingView view: UIView?) -> UIView { 

    var tempView = UIView(frame: CGRect(x: 0, y: 0, width: 300, height: 200)) 

    let images = UIButton(frame: CGRect(x: 0, y: 0, width: 300, height: 200)) 

    images.backgroundColor = UIColor.blueColor() 
    images.backgroundImageForState(.Normal) 
    images.backgroundRectForBounds(CGRect(x: 0, y: 0, width: 300, height: 200)) 

    tempView.addSubview(images) 

    let imageView = UIImageView(frame: CGRect(x: 0, y: 0, width: 400, height: 200)) 
    imageView.image = UIImage(named: "loading") 

    if (imageNinja != "") && (imageArray.count == 4) { // Checking if images fully loaded you can Delete Seccond Condition if it Coused any Error 

    imageView.backgroundColor = UIColor.orangeColor() 
    imageView.image = imageArray[index] 
    tempView.addSubview(imageView) 
    } 
    return imageView 
} 


func carousel(carousel: iCarousel, valueForOption option: iCarouselOption, withDefault value: CGFloat) -> CGFloat { 
    if option == iCarouselOption.Spacing { 
     return value * 1.1 
    } 
    return value 
} 

override func awakeFromNib() { 
    super.awakeFromNib() 
    numbers = [1,2,3,4] // i wrote it manualy but you can change it to: numbers = imageArray.count or write the th numbers of your images. 
} 

func numberOfItemsInCarousel(carousel: iCarousel) -> Int { 
    return numbers.count 
} 





//===========================Begin of View Did Load=================================== 


override func viewDidLoad() { 

    carouselView.type = .Rotary 
    carouselView.autoscroll = 0.1 

    hasInternet = connectedToNetwork() //checking internet again ! 
    print(hasInternet) // if true then internet is ok 

    if hasInternet == true { 
    urll = NSURL(string: "http://yourwebsite.com/api/?slider=uij6sdnb") // <== put your php address here !! 
    let session = NSURLSession.sharedSession() 
    let task = session.dataTaskWithURL(urll) {(data, response, error) -> Void in 
     do { 
      let records = try NSJSONSerialization.JSONObjectWithData(data!, options: NSJSONReadingOptions.MutableContainers) as! NSArray 
      for record in records { 
       //slide_url is the subject of database row from php... change it to yours 
       let urimage = record["slide_url"] as! String 
       self.urls.append(urimage) 
      } 
      print(self.urls[2]) 
      self.image1 = self.urls[0] 
      self.image2 = self.urls[1] 
      self.image3 = self.urls[2] 
      self.image4 = self.urls[3] 
     } 
     catch { 
      print("Json Error") 
     } 

     while self.imageNinja == "" { 
      self.image1 = self.urls[0] 
      self.image2 = self.urls[1] 
      self.image3 = self.urls[2] 
      self.image4 = self.urls[3] 
      print("4th image downloaded") 
      print(self.image4) 

      //----------------------------------- downoad image ----------------------------------------- 
      let url = NSURL(string: self.image1) 
      dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)) { 
       let data = NSData(contentsOfURL: url!) //make sure your image in this url does exist, otherwise unwrap in a if let check 
       dispatch_async(dispatch_get_main_queue(), { 
        let image = UIImage(data: data!) 
        self.imageArray.append(image!) 
       }); 
      } 
      //----------------------------------- downoad image ----------------------------------------- 
      //----------------------------------- downoad image ----------------------------------------- 
      let url2 = NSURL(string: self.image2) 
      dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)) { 
       let data = NSData(contentsOfURL: url2!) //make sure your image in this url does exist, otherwise unwrap in a if let check 
       dispatch_async(dispatch_get_main_queue(), { 
        let image = UIImage(data: data!) 
        self.imageArray.append(image!) 
       }); 
      } 
      //----------------------------------- downoad image ----------------------------------------- 
      //----------------------------------- downoad image ----------------------------------------- 
      let url3 = NSURL(string: self.image3) 
      dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)) { 
       let data = NSData(contentsOfURL: url3!) //make sure your image in this url does exist, otherwise unwrap in a if let check 
       dispatch_async(dispatch_get_main_queue(), { 
        let image = UIImage(data: data!) 
        self.imageArray.append(image!) 
       }); 
      } 
      //----------------------------------- downoad image ----------------------------------------- 
      //----------------------------------- downoad image ----------------------------------------- 
      let url4 = NSURL(string: self.image4) 
      dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)) { 
       let data = NSData(contentsOfURL: url4!) //make sure your image in this url does exist, otherwise unwrap in a if let check 
       dispatch_async(dispatch_get_main_queue(), { 
        let image = UIImage(data: data!) 
        self.imageArray.append(image!) 



        print("imageArray Count is is :") 
        print(self.imageArray.count) 
        self.carouselView.reloadData() //this one is do nothing! i put it for luck! 
       }); 
      } 
      //----------------------------------- downoad image ----------------------------------------- 

      self.imageNinja = "hhh" 

     } 

    } 

    task.resume() 

    } 


    // ================================= end of view did load 

} 

// checking internet connection 
func connectedToNetwork() -> Bool { 
    var zeroAddress = sockaddr_in() 
    zeroAddress.sin_len = UInt8(sizeofValue(zeroAddress)) 
    zeroAddress.sin_family = sa_family_t(AF_INET) 
    guard let defaultRouteReachability = withUnsafePointer(&zeroAddress, { 
     SCNetworkReachabilityCreateWithAddress(nil, UnsafePointer($0)) 
    }) else { 
     return false 
    } 
    var flags : SCNetworkReachabilityFlags = [] 

    if SCNetworkReachabilityGetFlags(defaultRouteReachability, &flags) == false { 
     return false 
    } 
    let isReachable = flags.contains(.Reachable) 
    let needsConnection = flags.contains(.ConnectionRequired) 
    return (isReachable && !needsConnection) 
} 

} 
+0

我有一個類似的問題,你可以請我幫忙嗎https://stackoverflow.com/questions/44690294/firebase-imageview-array#44690294 – juelizabeth