Ios 如何按“创建时间”在PhotosTransable数组中排序图像,并让我的收藏视图相应地显示它们?
正如你所见,我正在调用instagram的API,为两个不同的用户tuulavintage和wendyslookbook提供他们最近的20张照片。然后,我解析ImageURL的数据,将它们放入两个单独的for-in循环中,在其中获取这些ImageURL并将它们更改为UIImages,然后将它们放入let photos=NSMutableArray中。然后我将UIimages添加到我的集合视图cell.imageView.image=photos.objectAtIndexindexPath.row as?UIImage 我还将解析后的NSdictionary响应计算为so self.photoCount=tuulavintageImageResponse.count+wendyslookbookImageResponse.count为Int。这样我就可以告诉我的集合视图要生成多少个单元格 您也可以在这里看到全局主视图 var tuulavintageTimeResponse=tuulavintagedicinationary.valueForKeyPathdata.created_time as NSArray 这里呢 var wendyslokbooktimeresponse=wendyslokbookdictionary.valueForKeyPathdata.created_time as NSArray 我解析NSDictionary响应,为每个图像检索unixtimecode数组,但它们没有连接 我的问题是,如何使用我可以检索到的unixtimecode,在发布这些照片时,将它们显示在我的收藏视图中?我有一种感觉,我需要将UIimage与它们的特定时间代码匹配起来,然后告诉我的收藏视图按unixtime进行订购Ios 如何按“创建时间”在PhotosTransable数组中排序图像,并让我的收藏视图相应地显示它们?,ios,swift,uiimage,nsmutablearray,uicollectionview,Ios,Swift,Uiimage,Nsmutablearray,Uicollectionview,正如你所见,我正在调用instagram的API,为两个不同的用户tuulavintage和wendyslookbook提供他们最近的20张照片。然后,我解析ImageURL的数据,将它们放入两个单独的for-in循环中,在其中获取这些ImageURL并将它们更改为UIImages,然后将它们放入let photos=NSMutableArray中。然后我将UIimages添加到我的集合视图cell.imageView.image=photos.objectAtIndexindexPath.ro
提前谢谢 好吧,你不必创建一个文件,但这是保持事物整洁的好习惯 在同一控制器文件中,但在控制器定义之外或在新的Swift文件中尝试
//
// ViewController.swift
// Fashun
//
// Created by Alex Macleod on 20/10/14.
// Copyright (c) 2014 Alex Macleod. All rights reserved.
//
import UIKit
class ViewController: UIViewController, UICollectionViewDelegateFlowLayout, UICollectionViewDataSource {
var collectionView: UICollectionView?
var instanceOfCustomObject: CustomObject = CustomObject()
var accessToken: NSString! = "14128167.52d0add.2fbff9669d9141099597cbb8d67764a4"
var userDefaults: NSUserDefaults!
let colorWheel = ColorWheel()
var photoCount: Int! = 0
let photos = NSMutableArray()
override func viewDidLoad() {
super.viewDidLoad()
// userDefaults = NSUserDefaults.standardUserDefaults()
// self.accessToken = userDefaults!.objectForKey("accessToken") as NSString
// println(self.accessToken)
// instanceOfCustomObject.someProperty = "Hello World"
// var accessToken : NSString? = NSString(instanceOfCustomObject.accessToken)
// println(accessToken)
// instanceOfCustomObject.authorize()
// Do any additional setup after loading the view, typically from a nib.
let layout: UICollectionViewFlowLayout = UICollectionViewFlowLayout()
// layout.sectionInset = UIEdgeInsets(top: 20, left: 0, bottom: 0, right: 0)
layout.itemSize = CGSize(width: 124, height: 124)
layout.minimumInteritemSpacing = 1.0
layout.minimumLineSpacing = 1.0
collectionView = UICollectionView(frame: self.view.frame, collectionViewLayout: layout)
collectionView!.dataSource = self
collectionView!.delegate = self
collectionView!.registerClass(Cell.self, forCellWithReuseIdentifier: "Cell")
collectionView!.backgroundColor = UIColor.whiteColor()
self.view.addSubview(collectionView!)
getData()
// imageCount()
}
func getData() -> Void {
let tuulavintageUrl = NSURL(string:"https://api.instagram.com/v1/users/7522782/media/recent/?access_token=\(self.accessToken)")
let wendyslookbookUrl = NSURL(string:"https://api.instagram.com/v1/users/14454619/media/recent/?access_token=\(self.accessToken)")
// let sharedSession = NSURLSession.sharedSession()
// let downloadTask: NSURLSessionDownloadTask = sharedSession.downloadTaskWithURL(baseUrl!, completionHandler: { (location: NSURL!, response: NSURLResponse!, error: NSError!) -> Void in
// var urlContents = NSString.stringWithContentsOfURL(location, encoding: NSUTF8StringEncoding, error: nil)
// println(urlContents)
let tuulavintageData = NSData(contentsOfURL: tuulavintageUrl!)
let wendyslookbookData = NSData(contentsOfURL: wendyslookbookUrl!)
if (tuulavintageData != nil) & (wendyslookbookData != nil) {
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), {
let tuulavintageDictionary: NSDictionary = NSJSONSerialization.JSONObjectWithData(tuulavintageData!, options: nil, error: nil) as NSDictionary
let wendyslookbookDictionary: NSDictionary = NSJSONSerialization.JSONObjectWithData(wendyslookbookData!, options: nil, error: nil) as NSDictionary
// println(tuulavintageDictionary)
var tuulavintageImageResponse = tuulavintageDictionary.valueForKeyPath("data.images.standard_resolution.url") as NSArray
var tuulavintageTimeResponse = tuulavintageDictionary.valueForKeyPath("data.created_time") as NSArray
// println(tuulavintageTimeResponse)
var wendyslookbookImageResponse = wendyslookbookDictionary.valueForKeyPath("data.images.standard_resolution.url") as NSArray
var wendyslookbookTimeResponse = wendyslookbookDictionary.valueForKeyPath("data.created_time") as NSArray
println(wendyslookbookTimeResponse)
for imageUrls in tuulavintageImageResponse {
var imageUrlsAsStrings: NSString = imageUrls as NSString
var imageAsNsurls = NSURL(string: imageUrlsAsStrings)
var err: NSError?
var imageData :NSData = NSData(contentsOfURL: imageAsNsurls!,options: NSDataReadingOptions.DataReadingMappedIfSafe, error: &err)!
self.photos.addObject(UIImage(data:imageData)!)
// println(self.photos)
}
for imageUrls in wendyslookbookImageResponse {
var imageUrlsAsStrings: NSString = imageUrls as NSString
var imageAsNsurls = NSURL(string: imageUrlsAsStrings)
var err: NSError?
var imageData :NSData = NSData(contentsOfURL: imageAsNsurls!,options: NSDataReadingOptions.DataReadingMappedIfSafe, error: &err)!
self.photos.addObject(UIImage(data:imageData)!)
// println(self.photos)
}
dispatch_async(dispatch_get_main_queue(), { () -> Void in
self.photoCount = tuulavintageImageResponse.count + wendyslookbookImageResponse.count as Int
self.collectionView?.reloadData()
})
})
} else {
let networkIssueController = UIAlertController(title: "Error", message: "Something went wrong get a better phone you pleb!", preferredStyle: .ActionSheet)
let okButton = UIAlertAction(title: "OK", style: .Default, handler: nil)
networkIssueController.addAction(okButton)
let cancelButton = UIAlertAction(title: "Cancel", style: .Cancel, handler: nil)
networkIssueController.addAction(cancelButton)
self.presentViewController(networkIssueController, animated: true, completion: nil)
dispatch_async(dispatch_get_main_queue(), { () -> Void in
//Stop refresh animation
})
}
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
func collectionView(collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
return photoCount
}
func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCellWithReuseIdentifier("Cell", forIndexPath: indexPath) as Cell
// println(photos)
// cell.textLabel.text = "Text"
cell.imageView.image = photos.objectAtIndex(indexPath.row) as? UIImage
// cell.photo = self.photos[indexPath.row] as? NSDictionary
cell.imageView.backgroundColor = colorWheel.randomColor()
return cell
}
}
如果在单独的文件中执行此操作,请记住在新文件的开头添加这行代码
class IGPhotoContainer {
var image: UIImage!
var timestamp: String = ""
//Your constructor can be like this
init() {
}
//or overload it with 2 params for your convenience.
init(newimage: UIImage, newtime: String){
this.image = newimage
this.timestamp = newtime
}
}
如果有人敢看我可怕的代码,这里有一个指向我的项目的链接。创建你自己的对象,它将有两个属性,一个UIImage和时间戳。现在,您的数组将不仅仅存储UIImage,它还将存储这个新类,该类将具有以下两个属性以满足您的需要:哦,伙计,我该怎么做?创建我自己的对象新类是否需要创建一个新的swift文件?谢谢Steven,我将再次尝试photoMatrix,然后执行上述操作。当我碰到不可避免的总是隐约出现的砖墙时,我会给你回复。@alemac852只是一个简短的旁注,因为你想比较时间戳,我建议你使用Float/Double类型而不是String。。。那是我的错误,所以我放弃了光矩阵。我在单独的swift文件中完成了上面的课程。我如何告诉我的收藏视图按时间订购照片?我太迷路了…我怎么能联系你史蒂文·赫尔南德斯。我有一个你可能感兴趣的建议。我注意到你喜欢为IOS制作游戏。碰巧我是一名声音工程师/声音设计师/音乐制作人,以前为应用程序制作过声音。现在考虑到这样一个事实,即当涉及到编码/swift时,您清楚地知道自己在谈论什么。你有兴趣帮我完成当前的项目吗?作为回报,我会为你即将到来的游戏制作声音/音乐?
import UIKit