Allie
Allie

Reputation: 57

Creating Array of Collected Images

I am creating an array of images collected from the user. This array is being used to display images in a UICollectionView. I am collecting/storing the images in a file called ImageStore.swift, see it below. Also, see the array in my UICollection View. What do I put in my array to pass the images?

View Controller with UICollectionView:

    class PhotosViewController: UIViewController, UICollectionViewDelegate, UICollectionViewDataSource {
override func viewDidLoad() {
    super.viewDidLoad()
}

override func viewWillAppear(animated: Bool) {
    super.viewWillAppear(animated)

    let layout: UICollectionViewFlowLayout = UICollectionViewFlowLayout()
    layout.sectionInset = UIEdgeInsets(top: 20, left: 10, bottom: 10, right: 10)
    layout.itemSize = CGSize(width: 100, height: 100)

    let myCollectionView:UICollectionView = UICollectionView(frame: self.view.frame, collectionViewLayout: layout)
    myCollectionView.dataSource = self
    myCollectionView.delegate = self
    myCollectionView.registerClass(RDCellCollectionViewCell.self, forCellWithReuseIdentifier: "MyCell")
    myCollectionView.backgroundColor = UIColor.whiteColor()
    self.view.addSubview(myCollectionView)
}

func collectionView(collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
    return images.count
}

var images: [UIImage] = [

]

func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {
    let myCell = collectionView.dequeueReusableCellWithReuseIdentifier("MyCell", forIndexPath: indexPath) as! RDCellCollectionViewCell
    myCell.imageView.image = images[indexPath.item]
    myCell.backgroundColor = UIColor.grayColor()
    return myCell
}

func collectionView(collectionView: UICollectionView, didSelectItemAtIndexPath indexPath: NSIndexPath)
{
    print("User tapped on item \(indexPath.row)")
}


override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}

}

ImageStore.swift :

    class ImageStore: NSObject {

let cache = NSCache()

func setImage(image: UIImage, forKey key: String) {
    cache.setObject(image, forKey: key)

    let imageURL = imageURLForKey(key)

    if let data = UIImageJPEGRepresentation(image, 0.5) {
        data.writeToURL(imageURL, atomically: true)
    }
}
func imageForKey(key: String) -> UIImage? {
    if let existingImage = cache.objectForKey(key) as? UIImage {
        return existingImage
    }

    let imageURL = imageURLForKey(key)
    guard let imageFromDisk = UIImage(contentsOfFile: imageURL.path!) else {
        return nil
    }

    cache.setObject(imageFromDisk, forKey: key)
    return imageFromDisk
}

func deleteImageForKey(key: String) {
    cache.removeObjectForKey(key)

    let imageURL = imageURLForKey(key)
    do {
        try NSFileManager.defaultManager().removeItemAtURL(imageURL)
    }
    catch let deleteError {
        print("Error removing the image from disk: \(deleteError)")
    }
}

func imageURLForKey(key: String) -> NSURL {
    let documentsDirectories =
    NSFileManager.defaultManager().URLsForDirectory(.DocumentDirectory, inDomains: .UserDomainMask)
    let documentDirectory = documentsDirectories.first!

    return documentDirectory.URLByAppendingPathComponent(key)
}

}

Detail View Controller:

var imageStore: ImageStore!

@IBAction func takePicture(sender: UIBarButtonItem) {

    let imagePicker = UIImagePickerController()

    if UIImagePickerController.isSourceTypeAvailable(.Camera) {
        imagePicker.sourceType = .Camera
    } else {
        imagePicker.sourceType = .PhotoLibrary
    }
    imagePicker.delegate = self

    presentViewController(imagePicker, animated: true, completion: nil)
}

func imagePickerController(picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String: AnyObject]) {

    let image = info[UIImagePickerControllerOriginalImage] as! UIImage

    imageStore.setImage(image, forKey: item.itemKey)

    imageView.image = image

    dismissViewControllerAnimated(true, completion: nil)
}

Upvotes: 1

Views: 260

Answers (2)

Dhruv Narayan Singh
Dhruv Narayan Singh

Reputation: 655

Best approach for large data set is using SQLite database for storing the file name which can be differentiated by timestamp of captured image. If you are using offline functionality in app.

1.Create table for image name
|user_id|image_name|
|       |          |
|       |          |

2.Get all image name from database for particular user and store it in Array
3.Search for image in document directory

    --Update or delete the image from the database and document directory according to user action 

Upvotes: 1

RyanM
RyanM

Reputation: 761

If you wanted to add all your images to an array you could simply do this:

let imagesArray = [UIImage(named: "img1"), UIImage(named: "img2"), UIImage(named: "img3"), UIImage(named: "img4")]

if you wanted to append an image, this is how you would do it:

imagesArray.append(UIImage(named: "imageName"))

Upvotes: 0

Related Questions