2017-06-16 12 views
0

firebaseのユーザー写真をダウンロードしてコレクションビュー(図のようなもの) として表示していますが、別のビューコントローラでクリックした写真を拡大表示しようとしましたが、働いていない。私のコードについて 任意の考え:コレクションビューコントローラから別のビューコントローラに画像をスウィフトする

class ProfileViewController: UIViewController{ 
    var photoThumbnail: UIImage! 
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { 

     let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "collection_cell", for: indexPath) as! ProfileCollectionViewCell 
     cell.imageCollection.downloadImage2(from: currPosts[indexPath.row].photoUrl) 
     cell.imageCollection.image = photoThumbnail 
     return cell 
    } 

    func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) { 
     performSegue(withIdentifier: "photoViewSegue", sender: nil) 
    } 

    override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 
     var destViewController : EnlargePhotoViewController = segue.destination as! EnlargePhotoViewController 
     destViewController.labelText = "test" //**** this works 
     destViewController.myImage = photoThumbnail //**** this doesnt work 
    } 

} 

とコレクションビューのセルは次のとおりです。

最後に
class ProfileCollectionViewCell: UICollectionViewCell { 
    @IBOutlet weak var imageCollection: UIImageView! 

} 

ターゲットのViewController:

class EnlargePhotoViewController: UIViewController { 

     @IBOutlet weak var myLabel: UILabel! 
     @IBOutlet weak var enlargedPhoto: UIImageView! 

     var labelText = String() 
     var myImage: UIImage! 

     override func viewDidLoad() { 
      super.viewDidLoad() 

      myLabel.text = labelText 
      enlargedPhoto.image = myImage 
     } 
    } 
+0

*そのない完全なコードが、私は最も重要な行を共有 –

+0

すべてのコードを見ることなく質問に答える方法を知ってそのハードは、抽出物中の変数photoThumbnailが設定されていないとつねにnilん提供。 – user863238

答えて

2

は、このコードに変更してみてください。

func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) { 
    let cell = collectionView.cellForItem(at: indexPath) as! ProfileCollectionViewCell 

    photoThumbnail = cell.imageCollection.image 
    performSegue(withIdentifier: "photoViewSegue", sender: nil) 
} 
+0

! –

+0

偉大な男、あなたは最高です –

0
class ProfileViewController: UIViewController{ 
    var photoThumbnail: UIImage! 
    var selectedPhotoURL: NSUrl! 


func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { 

     let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "collection_cell", for: indexPath) as! ProfileCollectionViewCell 
     cell.imageCollection.downloadImage2(from: currPosts[indexPath.row].photoUrl) 
     cell.imageCollection.image = photoThumbnail 
     return cell 
    } 

    func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) { 
     selectedPhotoURL = currPosts[indexPath.row].photoUrl 
     performSegue(withIdentifier: "photoViewSegue", sender: nil) 
    } 

    override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 
     var destViewController : EnlargePhotoViewController = segue.destination as! EnlargePhotoViewController 
     destViewController.labelText = "test" //**** this works 
     //make image from selected url or pass url and download it in EnlargePhotoViewController 
     let downlodedImage = yourMethodToDownload(selectedPhotoURL) 
     destViewController.myImage = downlodedImage //**** this will work work 
    } 

} 
+0

しかし、iveはすでにイメージをダウンロードしています。もしそれを再度ダウンロードすれば、それは悪いメモリ管理になります。おかげで –

1

あなたの唯一の目標は、選択したセルの画像を取得することです。これは、より効率的に行うことができます。あなたがしなければならないのは、細胞ImageViewのプロパティに読み取り/書き込みされ、photoThumbnailはちょうどより安全、画像を取得

まず
override func viewDidLoad() { 
     super.viewDidLoad() 


     if let getImage = myImage 
     { 
     myLabel.text = labelText 
     enlargedPhoto.image = getImage 
     } 
    } 
0

のように使用するためにこの

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { 

    let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "collection_cell", for: indexPath) as! ProfileCollectionViewCell 
    cell.imageCollection.downloadImage2(from: currPosts[indexPath.row].photoUrl) 
    //cell.imageCollection.image = photoThumbnail <-- No need of this 
    return cell 
} 

func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) { 


    // get the correct cell on select 
    if let cell = collectionView.cellForItem(at: indexPath) as! ProfileCollectionViewCell 
    { 
    photoThumbnail = cell.imageCollection.image <-- finally assign the imageview to image 
    performSegue(withIdentifier: "photoViewSegue", sender: self) 
    } 
} 

を変更するので、常にnilに設定されることはありませんビューコントローラ

func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) { 
     if indexPath.row == 0 
     { 
      let objstory = storyboard?.instantiateViewController(withIdentifier: "SecondViewController") as! SecondViewController 
     objstory.strd = imageView.image 
     _ = self.navigationController?.pushViewController(objstory, animated: true) 

     } 
    } 

SecondViewController

var strd:UIImage! 
@IBOutlet weak var imgprof: UIImageView! 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     imgprof.image = strd 


     // Do any additional setup after loading the view. 
    } 
関連する問題