Swift引用从用户照片收集的UIImage到Dict

时间:2016-05-03 21:33:57

标签: ios swift uiimage uiimagepickercontroller

我在故事板中有一个页面,用户可以在其中更改其昵称和用户图标。 用户,用户名是预定义的,我和NSUserDefaults一起使用它来存储关于所述用户的最少信息;

 UserData['UserID'] = ["Nickname":"Johnny English", "UsersProfile": "abc123"]

我加载了一个用户可以修改其昵称和个人资料图片的页面,使用 UIImagePickerController 我可以在用户库中找到一个图像,然后用新的个人资料替换页面上的图像之一。

但是我无法找到一种方法来引用iOS目录中的图像或将图像移动到应用程序内部并以这种方式引用它。

到目前为止,我有:

  func imagePickerController(picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : AnyObject]) {
    if let pickedImage = info[UIImagePickerControllerOriginalImage] as? UIImage {
        UserIconImageView.contentMode = .ScaleAspectFit
        UserIconImageView.image = pickedImage
        // Add the UsersProfile to the UsersProfile entry for this User
        //detailsOfUser["CustomImage"] = pickedImage
        // Change the 'Done' button to a 'Save'
        self.completeButton.title = "Save"
    }
    dismissViewControllerAnimated(true, completion: nil)
}

什么是最好的方式来这里? 引用图像或将其移动到应用程序中是否更好?如果是这样的话?

 detailsOfUser["CustomImage"] = does a url / referencing string go here?

1 个答案:

答案 0 :(得分:0)

最近我遇到过类似的问题。我发现所有的anwsers都说没有办法得到UIImagePickerController选择的这个图像的引用,我的解决方案就是这样:

首先,我找到了选择图片的本地Documents文件夹路径:

 func imagePickerController(picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : AnyObject]) {
    let docsFileHandler: FileManager = FileManager.init()
    let documentDirectoryPath: String = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true).first!

然后,我拍摄了一张选定的照片,其名称带有扩展名:

        let imageFromPicker = info[UIImagePickerControllerOriginalImage]!
        var imageID = (info[UIImagePickerControllerReferenceURL] as! NSURL).absoluteString as NSString
        let imageExt = (info[UIImagePickerControllerReferenceURL] as! NSURL).lastPathComponent! as NSString

下一步,我从资产库中找到了图片名称。我已经使用了具有ID和扩展名的部分,但您可以将其保存为例如用户名。我已将图片的新名称添加到Document文件夹路径。

        let startRangeName = imageID.rangeOfString("id=")
        let endRangeName = imageID.rangeOfString("&")

        let idRange = NSMakeRange(startRangeName.location + startRangeName.length, endRangeName.location - startRangeName.location - endRangeName.length - startRangeName.length)

        imageID = imageID.substringWithRange(idRange)

        var writePathForFile = (documentDirectoryPath as NSString).stringByAppendingPathComponent(imageID as String)
        writePathForFile.appendContentsOf(imageExt as String)

最后一步是将所选图片保存到具有已创建名称的Documents文件夹:

        let imageDataFromPicker = UIImagePNGRepresentation(imageFromPicker as! UIImage)

        imageDataFromPicker?.writeToFile(writePathForFile, atomically: true)

此时,您可以将 writePathForFile 用于 detailsOfUser [“CustomImage”]