无法从 web url 向 iCarousel 显示图像
Posted
技术标签:
【中文标题】无法从 web url 向 iCarousel 显示图像【英文标题】:Can't Show images to iCarousel from web url 【发布时间】:2016-07-23 19:54:39 【问题描述】:我想在 iCarousel SlideShow 上显示来自网站的一些图片。
我从 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 图像。
对于更多或更少的图像,您可以轻松应用更改。
我添加了来自 jared Davinson Youtube 频道的 icrousel。
享受吧。
//
// 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)
【讨论】:
我也有类似的问题,你能帮我吗***.com/questions/44690294/…以上是关于无法从 web url 向 iCarousel 显示图像的主要内容,如果未能解决你的问题,请参考以下文章
Google 登录 API 挂起并出现未捕获的错误无法从 URL 哈希获取父源