【问题标题】:Swift referencing UIImage gathered from Users photos into a DictSwift 将从用户照片中收集的 UIImage 引用到字典中
【发布时间】:2016-05-03 21:33:57
【问题描述】:

我在故事板中有一个页面,用户可以在其中更改他们的昵称和用户图标。 用户、用户名是预定义的,我使用它和 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?

【问题讨论】:

    标签: ios swift uiimage uiimagepickercontroller


    【解决方案1】:

    最近我遇到了类似的问题。我发现的所有 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"]

    【讨论】:

    • 工作就像一个魅力!有一件事要提。 FileManager 行需要是:let docsFileHandler: NSFileManager = NSFileManager.init()
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-01-11
    • 1970-01-01
    • 2013-10-30
    • 1970-01-01
    • 2016-11-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多