2017-03-27 16 views
1

私はiOS devを使い慣れていないので、ローカルディレクトリからimageViewにイメージをロードする方法を理解できません。 私はimagePickerControllerを使用してイメージを選択し、その情報を取得し、この情報を使用してイメージをimageViewに表示します。ここでSwift 3ローカルディレクトリからイメージをロード

は、画像とその情報辞書選択するためのコードです:次に

func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) { 
     let image    = info[UIImagePickerControllerOriginalImage] as! UIImage 

     let imageUrl   = info[UIImagePickerControllerReferenceURL] as! NSURL 
     let imageName   = imageUrl.lastPathComponent 
     let documentDirectory = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true).first! 
     let photoURL   = NSURL(fileURLWithPath: documentDirectory) 
     let localPath   = photoURL.appendingPathComponent(imageName!)! 

     imagesList.append(localPath) 

     picker.dismiss(animated: true, completion: nil) 
    } 

が、ここで私はいくつかの助けを探していますどこで、私は画像をロードするためにlocalPathにまたはIMAGEURLのいずれかを使用したいです別のimageViewでは、しかし、どのように把握することはできません。 私は試しました

func changeImage(_ sender: Any) { 
     if imagesList.count > 0 { 
      let imageUrlPath = imagesList[indexList] 
      let urlString: String = imageUrlPath.absoluteString 

      imageView.image = UIImage(contentsOfFile: urlString) 

      indexList = (indexList + 1) % imagesList.count 
     } 
    } 

しかし、私は何か動作することはできません。 どのように私はそれを達成することができますか?

ありがとうございました。

+0

あなたは 'imageUrlPath.absoluteString'の代わりに' imageUrlPath.path'を使用する必要があります –

+0

ありがとうございました。エラーはありませんが、画像はimageViewに表示されません。 urlStringを印刷すると、 "/asset.JPG"のみが含まれていると思います。 contentsOfFileに含まれるもの:パス全体(file:/// Users/me/Library/Developer/CoreSimulator/Devices/BF7D44E4-26DD-43EE-5543-D7AB7654F8DC/data/Containers/Data/Application/C9561694- 34E9-46AD-83AA-38F067557F86/Documents/asset.JPG)または、「asset-library://asset/asset.JPG?id = 9A443DCB-EC44-42B8-8773-B597CF782EDD&ext = JPG」のようなもの – radar

+0

パスを印刷してイメージが存在するかどうかを確認してください –

答えて

2

URLストリングではなく、PHAssetオブジェクトへの参照を保存します。

その後
var imagesList = [PHAsset]() 

didFinishPickingMediaWithInfo中:

スタートとして、あなたの配列を定義して、最終的には

func getAssetFullsize(asset: PHAsset) -> UIImage { 
    let manager = PHImageManager.default() 
    let option = PHImageRequestOptions() 
    var img = UIImage() 
    option.isSynchronous = true 
    let w = asset.pixelWidth 
    let h = asset.pixelHeight 
    manager.requestImage(for: asset, targetSize: CGSize(width: w, height: h), contentMode: .aspectFit, options: option, resultHandler: {(result, info)->Void in 
     img = result! 
    }) 
    return img 
} 

func getAssetThumbnail(asset: PHAsset) -> UIImage { 
    let manager = PHImageManager.default() 
    let option = PHImageRequestOptions() 
    var thumbnail = UIImage() 
    option.isSynchronous = true 
    let w = 100 
    let h = 100 
    manager.requestImage(for: asset, targetSize: CGSize(width: w, height: h), contentMode: .aspectFit, options: option, resultHandler: {(result, info)->Void in 
     thumbnail = result! 
    }) 
    return thumbnail 
} 

と:次

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

    dismiss(animated: true) 

    // get the selected image as a UIImage object 
    let image = info[UIImagePickerControllerOriginalImage] as! UIImage 
    imageView.image = image 

    // save a PHAsset reference in imagesList array for later use 
    if let imageUrl = info[UIImagePickerControllerReferenceURL] as? URL{ 

     let assets = PHAsset.fetchAssets(withALAssetURLs: [imageUrl], options: nil) 

     if let p = assets.firstObject { 

      imagesList.append(p) 

     } 

    } 

} 

、カップル "利便性" の機能を追加実際の画像を取得したいとき:

もちろん、適切なエラーチェック、独自のサイジング、名前付け、トラッキングなどを追加したいと思うかもしれませんが、これはあなたが頭にしたい方向だと思います。

+0

ありがとうDonMag、後で私はそれをテストするより長い答えをします。 – radar

+0

これはまさに私が探していたものです。どうもありがとうございました。 – radar

関連する問題