【发布时间】:2017-11-04 07:00:24
【问题描述】:
在这个函数中,我需要改变图像视图的图像,将它移动到数组中的下一个图像上。
private func updateImage(index: Int) {
for x in 0..<urlArray.count
{
let imageUrl:URL = URL(string: "\(urlArray.object(at: x) as! String)")!
let request:URLRequest = URLRequest.init(url: imageUrl)
NSURLConnection.sendAsynchronousRequest(request, queue: OperationQueue.main, completionHandler: { (response, imageDta, error) in
if (error == nil)
{
self.imagesArray.add(UIImage(data: imageDta!)!)
if self.imagesArray.count > 0
{
self.iv.image = self.imagesArray.object(at: 0) as! UIImage
}
}else{
print("ERROR - \(error!)")
}
})
}
}
但是,目前,正在使用的图像被设置为我数组中索引 0 处的图像。如果多次调用此函数,我将如何移动到下一张图像?
这是我主要需要帮助的行:
self.iv.image = self.imagesArray.object(at: 0) as! UIImage
更新:我尝试将 Charly Pico 建议的代码添加到我的函数中,但它似乎并没有移动到数组中的下一个图像上,我认为这与它的调用方式有关。我将详细介绍我的文件是如何构建的,并希望能阐明我想如何使用更改图像代码。
var urlArray:NSMutableArray! = NSMutableArray()
var imagesArray:NSMutableArray! = NSMutableArray()
这些保存 URL 和图像的数组在任何函数之外。
func GetTheStories() {
let ref = FIRDatabase.database().reference().child("Content")
ref.observe(FIRDataEventType.value, with: {(snapshot) in
self.fileArray.removeAll()
if snapshot.childrenCount>0{
for content in snapshot.children.allObjects as![FIRDataSnapshot]{
let contentInfo = content.value as? [String: String]
let contentType = contentInfo?["contentType"]
let storyLink = contentInfo?["pathToImage"]
let content = storyLink
self.urlArray = NSMutableArray.init(array:[storyLink])
}
}
})
}
这是我调用的函数,用于将我的 Firebase 服务器中的 URL 附加到 URLSARRAY。
override func viewDidAppear(_ animated: Bool) {
for x in 0..<urlArray.count
{
let imageUrl:URL = URL(string: "\(urlArray.object(at: x) as! String)")!
let request:URLRequest = URLRequest.init(url: imageUrl)
NSURLConnection.sendAsynchronousRequest(request, queue: OperationQueue.main, completionHandler: { (response, imageDta, error) in
if (error == nil)
{
self.imagesArray.add(UIImage(data: imageDta!)!)
if self.imagesArray.count > 0
{
self.iv.image = self.imagesArray.object(at: 0) as! UIImage
}
}else{
print("ERROR - \(error!)")
}
})
}
}
这是 Charly 创建并解释的函数,它允许我在屏幕加载时在 ImageView 上设置初始图像
private func updateImage(index: Int) {
var imageToPresent = 0
for x in 0..<urlArray.count
{
let imageUrl:URL = URL(string: "\(urlArray.object(at: x) as! String)")!
let request:URLRequest = URLRequest.init(url: imageUrl)
NSURLConnection.sendAsynchronousRequest(request, queue: OperationQueue.main, completionHandler: { (response, imageDta, error) in
if (error == nil)
{
self.imagesArray.removeAllObjects()
self.imagesArray.add(UIImage(data: imageDta!)!)
if self.imagesArray.count > 0
{
for x in 0..<self.imagesArray.count
{
if self.iv.image == self.imagesArray.object(at: x) as! UIImage
{
imageToPresent = x + 1
if imageToPresent >= self.imagesArray.count
{
imageToPresent = 0
}
}
}
self.iv.image = self.imagesArray.object(at: imageToPresent) as! UIImage
}
}else{
print("ERROR - \(error!)")
}
})
}
}
这是被调用以将图像更新到数组中的下一个的函数。但是,我相信它也不起作用,因为我尝试在下面应用 Charly 的代码是不正确的。这个函数在 ViewDidLoad 中是这样调用的
updateImage(index: 0)
并在此处调用它来更新图像。当分段进度条变为下一个时调用此函数。
func segmentedProgressBarChangedIndex(index: Int) {
print("Now showing index: \(index)")
updateImage(index: index)
}
我知道为什么我不使用按钮和操作有点令人困惑,这主要是因为我正在尝试创建一个 Instagram 风格的故事,其中的片段在完成或点击屏幕时会改变图像到数组中的下一个。我知道有很多东西需要查看,但我认为这将解释我想如何更详细地使用图像数组。
【问题讨论】:
标签: arrays swift xcode indexing