Ma question tldr est:Mise à jour UIImageView ne dessin qu'après les événements tactiles
Pourquoi ma UIImageView met uniquement à jour son image en cours d'élaboration à partir de petites touches plutôt que revieving points tirer d'une session multipeer-connectivité?
Actuellement, mon application fonctionne comme suit:
Un utilisateur appuie sur l'écran, si l'utilisateur est connecté à un poste en utilisant MultipeerConnectivity les pairs devraient voir ce que l'autre utilisateur a tiré apparaissent sur leur propre écran. La fonction drawLine utilise CGContextStrokePath() pour tracer une ligne:
drawLine(fromPoint: CGPoint,toPont: CGPoint){
UIGraphicsBeginImageContext(self.view.frame.size);
//... do the drawing of the line
let image = UIGraphicsGetImageFromCurrentImageContext();
canvas.image = image;
UIGraphicsEndImageContext()
}
la méthode de drawLine est appelée à partir de deux sources différentes, que ce soit dans les procédés de remplacement touchesMoved() ou touchesEnded() ou dans le procédé suivant qui prend en charge la réception données (deux Points Cg à tracer une ligne entre les deux) à partir d'une session multipeer connectivité:
func handleMPCReceivedDataWithNotification(notification : NSNotification){
let receivedDataDictionary = notification.object as! Dictionary<String, AnyObject>
let data = receivedDataDictionary["data"] as? NSData
let dataDictionary = NSKeyedUnarchiver.unarchiveObjectWithData(data!) as! Dictionary<String, AnyObject>
if let pointData = dataDictionary["points"] as! Dictionary<String,AnyObject>!{
let fromPointObj = pointData["fromPoint"] as! NSValue!
let toPointObj = pointData["toPoint"] as! NSValue
let toPoint = toPointObj.CGPointValue()
let fromPoint = fromPointObj.CGPointValue()
drawLineFrom(fromPoint, toPoint: toPoint)
}
}
Mon problème est que lorsque je tracer une ligne sur un dispositif, il tire bien au niveau local, et le procédé de drawLine est appelé le autre périphérique (comme je peux le voir à partir de pauses et d'impressions), mais l'autre appareil ne sera pas réellement mettre à jour l'image de la toile jusqu'à ce que l'appareil est dessiné n par son propre utilisateur (c.-à-d. un événement tactile se produit). Alors, est-ce que mon canvas UIImageView ne se met pas à jour jusqu'à ce qu'un TouchEvent soit appelé? J'ai essayé de trouver un moyen de le forcer à mettre à jour (par exemple quand j'appelle canvas.image = image je pensais que cela se mettrait à jour automatiquement), mais je n'ai pas été capable de résoudre ce problème.
Quoi qu'il en soit, des suggestions ou des commentaires sont grandement appréciés
William
Ceci est juste une supposition, mais puisque vous êtes mise à jour de l'interface utilisateur, il devra être fait sur le thread principal (par exemple, en utilisant 'dispatch_async'.). – Michael
Ouais, c'était ça! Merci Michael – user3846153