如何通过" created_time"在photosNSMutable数组中订购我的图像?并获取我的集合视图以相应地显示它们?

时间:2014-11-16 11:19:46

标签: ios swift uiimage nsmutablearray uicollectionview

//
//  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
    }
}

正如你所看到的那样,我正在为两个不同的用户打电话给Instagram的最新20张照片" tuulavintage"和" wendyslookbook"。然后我解析imageUrls的数据,将它们放入两个单独的for循环中,我将这些imageUrls更改为UIImages并将它们放在" let photos = NSMutableArray()"中。然后我将UIimages添加到我的集合视图单元格" cell.imageView.image = photos.objectAtIndex(indexPath.row)为?的UIImage"

我也像我这样计算我解析的NSdictionary响应" self.photoCount = tuulavintageImageResponse.count + wendyslookbookImageResponse.count as Int"。所以我可以告诉我的收藏品查看要制作的细胞数量

你也可以在这里看到(在全局主要的que中) " var tuulavintageTimeResponse = tuulavintageDictionary.valueForKeyPath(" data.created_time")as NSArray"

在这里

" var wendyslookbookTimeResponse = wendyslookbookDictionary.valueForKeyPath(" data.created_time")as NSArray"

我解析我的NSDictionary响应以检索每个图像的unixtimecode数组,但它们没有连接。

我的问题是如何在我使用可以检索的unixtimecode发布时,将这些照片显示在我的集合视图中?我有一种感觉,我需要将UIimage与他们的特定时间码相匹配,然后以某种方式告诉我的集合视图,通过unixtime对它们进行排序。

提前致谢。

1 个答案:

答案 0 :(得分:0)

好吧,你没有必要创建一个文件,但保持良好和整洁是一个很好的做法。

尝试在同一个控制器文件中,但在控制器定义之外或在新的Swift文件中。

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

   }

}

如果您在单独的文件中执行此操作,请记住在新文件的开头添加此行代码。

import UIKit