【发布时间】:2016-01-15 17:15:36
【问题描述】:
我想在一个视图控制器上显示两个图像,从相机胶卷中选择它们,
我已经设法进入相机胶卷以便能够选择它们,但是当我选择一个图像时,它会将它们放置在两个 UIImageViews 中。
我希望能够在 UIImageView 中显示两个不同的图像。
func imagePickerController(picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : AnyObject]) {
//handle media here i.e. do stuff with photo
print("imagePickerController called")
if let chosenImage = info[UIImagePickerControllerEditedImage] {
profileImage.image = chosenImage as? UIImage
let user: PFUser = PFUser.currentUser()!
let profileImageData = UIImageJPEGRepresentation(profileImage.image!, 1)
if (profileImageData != nil)
{
let profileFileObject = PFFile(data: profileImageData!)
user.setObject(profileFileObject!, forKey: "profilePicture")
}
}
到目前为止,我可以选择一个图像并将其成功保存到 Parse,但是当我尝试为另一个 UIImageView 添加其他代码时,如下所示:
if let chosenCoverImage = info[UIImagePickerControllerEditedImage] {
coverImage.image = chosenCoverImage as? UIImage
let coverUser: PFUser = PFUser.currentUser()!
let coverImageData = UIImageJPEGRepresentation(coverImage.image!, 1)
if (coverImageData != nil)
{
let coverFileObject = PFFile(data: coverImageData!)
coverUser.setObject(coverFileObject!, forKey: "coverPicture")
}}
}
代码的第二部分似乎不起作用,基本上它在两个 UIImageViews 中显示相同的图像,我认为我需要的是第二个
func imagePickerController(picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : AnyObject]) {
}
但这在同一个 swift 文件中显然是不可能的。
关于如何实现这一点有什么想法吗?
提前谢谢你!
这是我的完整 imagePickerConytoller 代码:
func imagePickerController(picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : AnyObject]) {
//handle media here i.e. do stuff with photo
print("imagePickerController called")
let chosenImage = info[UIImagePickerControllerEditedImage] as? UIImage
profileImage.image = chosenImage
let user: PFUser = PFUser.currentUser()!
let profileImageData = UIImageJPEGRepresentation(profileImage.image!, 1)
if (profileImageData != nil)
{
let profileFileObject = PFFile(data: profileImageData!)
user.setObject(profileFileObject!, forKey: "profilePicture")
}
let chosenCoverImage = info[UIImagePickerControllerEditedImage] as? UIImage
coverImage.image = chosenCoverImage
let coverUser: PFUser = PFUser.currentUser()!
let coverImageData = UIImageJPEGRepresentation(coverImage.image!, 1)
if (coverImageData != nil)
{
let coverFileObject = PFFile(data: coverImageData!)
coverUser.setObject(coverFileObject!, forKey: "coverPicture")
}
activityIndicator = UIActivityIndicatorView(frame: CGRectMake(0, 0, 50, 50))
activityIndicator.center = self.profileImage.center
activityIndicator.hidesWhenStopped = true
activityIndicator.activityIndicatorViewStyle = UIActivityIndicatorViewStyle.White
view.addSubview(activityIndicator)
activityIndicator.startAnimating()
activityIndicator.color = UIColor.grayColor()
user.saveInBackgroundWithBlock { (success:Bool, error:NSError?) -> Void in
self.activityIndicator.stopAnimating()
}
dismissViewControllerAnimated(true, completion: nil)
}
下面是我在 ViewDidLoad 中从 Parse 获取它们的方法:
if (PFUser.currentUser()?.objectForKey("profilePicture") != nil)
{
let userImageFile:PFFile = PFUser.currentUser()?.objectForKey("profilePicture") as! PFFile
userImageFile.getDataInBackgroundWithBlock({ (imageData: NSData?, error: NSError?) -> Void in
self.profileImage.image = UIImage(data: imageData!)
})
}
if (PFUser.currentUser()?.objectForKey("coverPicture") != nil)
{
let userCoverFile:PFFile = PFUser.currentUser()?.objectForKey("coverPicture") as! PFFile
userCoverFile.getDataInBackgroundWithBlock({ (imageData: NSData?, error: NSError?) -> Void in
self.coverImage.image = UIImage(data: imageData!)
})
}
【问题讨论】:
-
上面的前两个代码片段是否包含在同一个imagePickerController中?除非缺少一些代码,否则它将使用相同的图像两次执行相同的操作。您只需要在您的类中使用一个变量来跟踪您正在处理的图像,并将图像放入 profileImage 或 coverImage
-
嘿 @Russell 是的,他们在同一个 imagePickerController 中,可以吗?
-
是的,它会起作用 - 但你必须记住,只有在你已经做出选择后才能访问 imagePickerController。您需要做的是调用该函数两次 - 对每种类型的图像调用一次,并且您需要一些东西来跟踪您正在处理的图像
-
@Russell 我已经更新了上面的代码、ViewDidLoad 和完整的 imagePickerController 代码。
-
@Russell 实际上在您发表评论后,我只是又看了看,我不认为我在告诉我在上面发布的代码正在按下哪个按钮!
标签: ios swift parse-platform uiimage