我有一个更新照片按钮,连接到facebookgraphAPI并下载当前用户的个人资料照片。
我希望我的视图上的图像能够刷新,而无需重新加载viewController
。
有办法做到这一点吗?我知道tableview
有reloadData
和refreshcontrol
,但我没有使用tableview
。
class ProfileViewController: UIViewController , UITextViewDelegate{
@IBOutlet weak var imageView: UIImageView!
@IBOutlet weak var nameLabel: UILabel!
@IBOutlet weak var profileTextView: UITextView!
@IBAction func updatePicture(sender: UIButton) {
// pulls in latest facebook profile info
let vc = ViewController()
vc.getFBUserInfo(PFUser.currentUser()!)
dispatch_async(dispatch_get_main_queue(), { () -> Void in
self.imageView.setNeedsDisplay()
self.loadPhoto()
})
}
override func viewDidLoad() {
super.viewDidLoad()
loadProfile()
loadPhoto()
}
func loadPhoto() {
currentUser()?.getPhoto({
image in
self.imageView.layer.masksToBounds = true
self.imageView.contentMode = .Center
self.imageView.image = image
})
}
func loadProfile () {
nameLabel.text = currentUser()?.name
// get the existing profile from DB
if let profile = PFUser.currentUser()!.objectForKey("profileText") as? String {
profileTextView.text = profile
}
profileTextView.delegate = self
}
User.swift getPhoto功能:
func getPhoto(callback:(UIImage) -> ()) {
let imageFile = pfUser.objectForKey("picture") as! PFFile
imageFile.getDataInBackgroundWithBlock({
data, error in
if let data = data {
callback(UIImage(data: data)!)
}
})
}
答案 0 :(得分:3)
您的回调看起来可能正在后台队列中调用。当您在后台访问其类时,UIKit不喜欢它,并且常见的副作用是看起来UI没有更新(或者在延迟之后不会更新)。
尝试
func loadPhoto() {
currentUser()?.getPhoto({
image in
dispatch_async(dispatch_get_main_queue(), {
self.imageView.layer.masksToBounds = true
self.imageView.contentMode = .Center
self.imageView.image = image
})
})
}