Comment enregistrer une image distante avec Swift?
J'essaie d'afficher et d'enregistrer des images avec Swift. Sur le premier coup, il indique la distance de l'image sur imageview, sur le deuxième coup, il montre vide imageview au lieu de cela devrait être l'image qui a sauvé sur le premier coup.
var paths = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)[0] as String
var imagePath = paths.stringByAppendingPathComponent("images/\(id)/logo.jpg" )
var checkImage = NSFileManager.defaultManager()
if (checkImage.fileExistsAtPath(imagePath)) {
let getImage = UIImage(contentsOfFile: imagePath)
self.image?.image = getImage
} else {
dispatch_async(dispatch_get_main_queue()) {
let getImage = UIImage(data: NSData(contentsOfURL: NSURL(string: remoteImage)))
UIImageJPEGRepresentation(getImage, 100).writeToFile(imagePath, atomically: true)
self.image?.image = getImage
}
}
Edit: celui-ci a fonctionné pour moi.
var paths = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)[0] as String
var dirPath = paths.stringByAppendingPathComponent("images/\(id)" )
var imagePath = paths.stringByAppendingPathComponent("images/\(id)/logo.jpg" )
var checkImage = NSFileManager.defaultManager()
if (checkImage.fileExistsAtPath(imagePath)) {
let getImage = UIImage(contentsOfFile: imagePath)
self.image?.image = getImage
} else {
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0)) {
checkImage.createDirectoryAtPath(dirPath, withIntermediateDirectories: true, attributes: nil, error: nil)
let getImage = UIImage(data: NSData(contentsOfURL: NSURL(string: remoteImage)))
UIImageJPEGRepresentation(getImage, 100).writeToFile(imagePath, atomically: true)
dispatch_async(dispatch_get_main_queue()) {
self.image?.image = getImage
return
}
}
}
OriginalL'auteur bilmiyore | 2014-10-09
Vous devez vous connecter pour publier un commentaire.
Pour répondre à votre question principale, vous appelez le mal
UIImage
initialiseur. Vous devriez appelerUIImage(contentsOfFile: imagePath)
dans swift 2 etUIImage(contentsOf: imagePath)
dans swift 3.En outre, il semble que vous essayez de faire de votre télécommande à récupérer dans l'arrière-plan avec
dispatch_async
(ouDispatchQueue
dans swift 3), mais vous êtes de passage de la file d'attente principale, de sorte que vous êtes en train de blocage de la principale/thread d'INTERFACE utilisateur. Vous devez l'expédier à celle du fond files d'attente au lieu de cela, puis envoi à la file d'attente lorsque vous définissez l'image dans votre INTERFACE utilisateur:Swift 3 :
Swift 2 :
@Rob répondre re: la récupération de votre télécommande d'image et d'économie, il est vraiment le meilleur moyen pour ce faire.
J'ai juste vu les modifier à votre code... je vais mettre à jour ma réponse.
Merci, je pense que l'envoi fonctionne mieux maintenant. Mais je ne peux pas charger les images localement. Je pense que "var imagePath = chemins.stringByAppendingPathComponent("images/(id)/logo.jpg" )" est le problème, car "si le bloc" ne pas s'afficher du tout.
Avez-vous mis un point d'arrêt et regarda
imagePath
assurez-vous que cela a du sens? (vous pourriez tout aussi bienprintln(imagePath)
)Appelez simplement
NSFileManager
méthodecreateDirectoryAtPath
.OriginalL'auteur Mike S