2016-07-04 2 views
0

collectionview私は写真フレームワークを使って写真ライブラリから画像を読み込みます。saveSelectedという名前のセグを追加しました。viewController NoteDetailViewController私は渡すことができます.How同じライブラリから写真を読み込むUICollectionview

マイAddPhotoViewControllerはどのように私はこれを達成するためにdidSelectItemAtIndexPathとprepareForSegueを変更する必要があります

import UIKit 
import Photos 
private let reuseIdentifier = "PhotoCell" 
class AddPhotoViewController: UIViewController , UIImagePickerControllerDelegate ,UINavigationControllerDelegate ,UICollectionViewDataSource ,UICollectionViewDelegate 
{ 

@IBOutlet weak var photoAlbum: UICollectionView! 

var TakenImage : UIImageView! 

var assetCollection: PHAssetCollection! 
var photosAsset: PHFetchResult! 
var assetThumbnailSize: CGSize! 
let imagePicker: UIImagePickerController! = UIImagePickerController() 
var cameraon : Bool = false 

override func viewDidLoad() 
{ 
    super.viewDidLoad() 

    let collection:PHFetchResult = PHAssetCollection.fetchAssetCollectionsWithType(.SmartAlbum, subtype: .SmartAlbumUserLibrary, options: nil) 

    var i = 0 
    repeat 
    { 
     if let first_Obj:AnyObject = collection.objectAtIndex(i) 
     { 
      self.assetCollection = first_Obj as! PHAssetCollection 
     } 
     i++ 
    }while(i < collection.count) 



    // Do any additional setup after loading the view. 
} 

@IBAction func takePhoto(sender: AnyObject) { 
    if (UIImagePickerController.isSourceTypeAvailable(.Camera)) { 
     if UIImagePickerController.availableCaptureModesForCameraDevice(.Rear) != nil { 
      imagePicker.allowsEditing = false 
      imagePicker.sourceType = .Camera 
      imagePicker.cameraCaptureMode = .Photo 
      presentViewController(imagePicker, animated: true, completion: {}) 
      cameraon = true 
     } else { 
      print("Rear camera doesn't exist") 
     } 
    } else { 
     print("Camera inaccessable") 
    } 

} 
func imagePickerController(picker: UIImagePickerController, didFinishPickingImage image: UIImage!, editingInfo: [NSObject : AnyObject]!) { 
    TakenImage.image = image 
    if (cameraon) 
    { 
     let imageData = UIImageJPEGRepresentation(TakenImage.image!, 0.6) 
     let compressedJPGImage = UIImage(data: imageData!) 
     UIImageWriteToSavedPhotosAlbum(compressedJPGImage!, nil, nil, nil) 

    } 
    self.dismissViewControllerAnimated(true, completion: nil) 
} 


func imagePickerControllerDidCancel(picker: UIImagePickerController) { 
    print("User canceled image") 
    dismissViewControllerAnimated(true, completion: { 
     // Anything you want to happen when the user selects cancel 
    }) 
} 


override func viewWillAppear(animated: Bool) 
{ 
    if let layout = self.photoAlbum!.collectionViewLayout as? UICollectionViewFlowLayout{ 
     let cellSize = layout.itemSize 

     self.assetThumbnailSize = CGSizeMake(cellSize.width, cellSize.height) 
    } 

    //fetch the photos from collection 
    self.photosAsset = PHAsset.fetchAssetsInAssetCollection(self.assetCollection, options: nil) 

    self.photoAlbum!.reloadData() 


} 

// MARK: UICollectionViewDelegate 

/* 
// Uncomment this method to specify if the specified item should be selected 
override func collectionView(collectionView: UICollectionView, shouldSelectItemAtIndexPath indexPath: NSIndexPath) -> Bool { 
return true 
} 
*/ 


override func didReceiveMemoryWarning() { 
    super.didReceiveMemoryWarning() 
    // Dispose of any resources that can be recreated. 
} 
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) 
{ 
    if (segue.identifier == "savePhoto") 
    { 
     if let controller : NoteDetailViewController = segue.destinationViewController as? NoteDetailViewController 
     { 
      controller.imageView.image = TakenImage.image 
     } 
    } 
/* if (segue.identifier == "saveSelected") 
    { 
     if let controller2 : NoteDetailViewController = segue.destinationViewController as? NoteDetailViewController 
     { 
      if let cell = photoAlbum.cel as? PhotoAlbumCollectionViewCell 
      { 


      } 
     } 

    }*/ 
} 


func numberOfSectionsInCollectionView(collectionView: UICollectionView) -> Int 
{ 
    // #warning Incomplete implementation, return the number of sections 
    return 1 
} 

func collectionView(collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int 
{ 
    // #warning Incomplete implementation, return the number of items 
    var count: Int = 0 

    if(self.photosAsset != nil){ 
     count = self.photosAsset.count 
    } 
    print("\(self.photosAsset.count)") 
    return count 
} 
func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell 
{ 
    let cell: PhotoAlbumCollectionViewCell = photoAlbum.dequeueReusableCellWithReuseIdentifier("PhotoCell", forIndexPath: indexPath) as! PhotoAlbumCollectionViewCell 

    //Modify the cell 
    let asset: PHAsset = self.photosAsset[indexPath.item] as! PHAsset 

    PHImageManager.defaultManager().requestImageForAsset(asset, targetSize: self.assetThumbnailSize, contentMode: .AspectFill, options: nil, resultHandler: {(result, info)in 
     if let image = result { 
      cell.setThumbnailImage(image) 
     } 
    }) 

    return cell 
} 


func collectionView(collectionView: UICollectionView, didSelectItemAtIndexPath indexPath: NSIndexPath) { 



} 
func collectionView(collectinView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumLineSpacingForSectionAtIndex section: Int) -> CGFloat { 
    return 4 
} 

func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumInteritemSpacingForSectionAtIndex section: Int) -> CGFloat { 
    return 1 
} 

func collectionView(collectionView: UICollectionView, shouldShowMenuForItemAtIndexPath indexPath: NSIndexPath) -> Bool { 
    return false 
} 

func collectionView(collectionView: UICollectionView, canPerformAction action: Selector, forItemAtIndexPath indexPath: NSIndexPath, withSender sender: AnyObject?) -> Bool { 
    return false 
} 

func collectionView(collectionView: UICollectionView, performAction action: Selector, forItemAtIndexPath indexPath: NSIndexPath, withSender sender: AnyObject?) { 

    self.dismissViewControllerAnimated(false, completion: nil) 

} 

} 

の下に与えられていますか?

+0

あなたは 'collectionViewCell'でsegueを' stroyboard'または 'ViewController'で追加しましたか? –

+0

@Nirav私はストーリーボードにsegueを追加しました –

+0

segueは 'viewController'または' CollectionViewCell'でチェックされていますか? –

答えて

1

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 
    if (segue.identifier == "saveSelected") 
    { 
     let cell = sender as! PhotoAlbumCollectionViewCell 
     let indexPath = tableView.indexPathForCell(cell) 
     let destVC = segue.destinationViewController as! NoteDetailViewController 
     destVC.asset = self.photosAsset[indexPath.item] as! PHAsset 
    } 
} 

assetという名前のグローバルオブジェクトをに1つ作成します。 0

このような
var asset: PHAsset! 

は、今すぐあなたのviewDidLoad

override func viewDidLoad() { 
    super.viewDidLoad() 

    // Do any additional setup after loading the view. 
    PHImageManager.defaultManager().requestImageForAsset(asset, targetSize: self.assetThumbnailSize, contentMode: .AspectFill, options: nil, resultHandler: {(result, info)in 
     if let image = result { 
      self.imageView.image = image 
     } 
    }) 
} 

NoteDetailViewControllerの中にコード以下のように追加し、これはあなたを助けることを願っています。

+0

NoteDetailViewControllerに渡すと画像の明瞭度が失われます。この問題を解決するには –

+0

編集した回答を確認してください。 –

+0

編集した回答をお試しください。 –

0

コントローラーがロードされる前にイメージビューまたはアウトレットを設定することはできません。したがって、セグーコードを変更して、他のコントローラーに、セグ時に送信されるイメージを持つようにしてください。

if (segue.identifier == "savePhoto") 
    { 
     if let controller : NoteDetailViewController = segue.destinationViewController as? NoteDetailViewController 
     { 
      controller.image = TakenImage.image 
     } 
    } 

はその後seguedクラスに変更しますので、あなたの didSelectItemAtIndexPath方法であらゆる事を書き prepareForSegue方法では、このようなあなたのコードを変更する必要はありませんあなたは CollectionViewCellsegueを設定している

class NoteDetailViewController: UITableViewController { 
    var image: UIImage! 
} 
関連する問題