2015-08-15 4 views
0

Je veux utiliser SDWebImage pour télécharger une image avec l'URL et le dessiner dans UIView (utilisation cgcontext), mais quand le téléchargement est terminé, il n'y a rien arriverComment utiliser SDWebImage pour dessiner l'image dans cgcontext

func drawImage(){ 
    var imageView = UIImageView() 
    println("drawimageaaaaa") 
    imageView.sd_setImageWithURL(NSURL(string: drawObj.ctn!)!, placeholderImage: UIImage(named: "defaultphoto")!, completed: { (image:UIImage!, error:NSError!, type:SDImageCacheType, url:NSURL!) -> Void in 
     println("drawimagebbbb") 
     var context = UIGraphicsGetCurrentContext(); 
     CGContextSaveGState(context) 
     var cgimg = image!.CGImage; 
     var rect = CGRect(x: drawObj.points![0].x,y: drawObj.points![0].y,width: drawObj.currentWidth!,height: drawObj.currentHeight!) 
     CGContextTranslateCTM(context, rect.origin.x, rect.origin.y) 
     CGContextScaleCTM(context, 1.0, -1.0) 
     CGContextRotateCTM(context,-CGFloat(Double(drawObj.angle!)*M_PI/180)) 
     if drawObj.isFlip == true{ 
      CGContextTranslateCTM(context, -rect.width/2, rect.height/2) 
     }else{ 
      CGContextTranslateCTM(context, -rect.width/2, -rect.height/2) 
     } 
     CGContextTranslateCTM(context, -rect.origin.x, -rect.origin.y) 
     CGContextDrawImage(context, rect, cgimg); 
     CGContextRestoreGState(context) 
    }) 
    } 


    override func drawRect(rect: CGRect) { 
     for drawObj in drawObjs { 
      if drawObj.drawPara!.drawType == MouseStatus.attach{ 
      drawImage(drawObj) 
      } 
     } 
    } 

Maintenant, j'essaie de lancer à nouveau la fonction drawImage (même URL) l'image apparaît dans l'UIView

Comment dessiner dans UIView quand le téléchargement est terminé?

Répondre

0

si je bien vous voulez attirer l'SDWebImage quand drawRect est appelé

maintenant la question est ...... dessin doit être synchrone. vous ne pouvez pas dessiner l'écran quand vous voulez: D qui est ce que vous essayez et ne voyez pas.

(vous devez changer toute 'idée' de sorte que vous tracent réellement quand on lui demande à (quand drawRect est appelé)

par exemple

func drawImage(drawObj) { 
     println("drawimagebbbb") 
     var context = UIGraphicsGetCurrentContext(); 
     CGContextSaveGState(context) 
     var cgimg = image!.CGImage; 
     var rect = CGRect(x: drawObj.points![0].x,y: drawObj.points![0].y,width: drawObj.currentWidth!,height: drawObj.currentHeight!) 
     CGContextTranslateCTM(context, rect.origin.x, rect.origin.y) 
     CGContextScaleCTM(context, 1.0, -1.0) 
     CGContextRotateCTM(context,-CGFloat(Double(drawObj.angle!)*M_PI/180)) 
     if drawObj.isFlip == true{ 
      CGContextTranslateCTM(context, -rect.width/2, rect.height/2) 
     }else{ 
      CGContextTranslateCTM(context, -rect.width/2, -rect.height/2) 
     } 
     CGContextTranslateCTM(context, -rect.origin.x, -rect.origin.y) 
     CGContextDrawImage(context, rect, cgimg); 
     CGContextRestoreGState(context) 
} 

func loadImage(drawObj){ 
    var imageView = UIImageView() 
    println("drawimageaaaaa") 
    imageView.sd_setImageWithURL(NSURL(string: drawObj.ctn!)!, placeholderImage: UIImage(named: "defaultphoto")!, completed: { (image:UIImage!, error:NSError!, type:SDImageCacheType, url:NSURL!) -> Void in 
     dispatch_async(dispatch_get_main_queue()) { 
      drawObj.image = image 
      self.setNeedsDisplay() //tell iOS to ready for drawing 
     } 
    }) 

drawObj.imageViewUsedForLoading = imageView // conserver! }

override func drawRect(rect: CGRect) { 
     for drawObj in drawObjs { 
      if drawObj.drawPara!.drawType == MouseStatus.attach{ 
      if drawObj.image /*you have to manage this somehow*/ { 
       drawImage(drawObj) 
      } 
      else { 
       loadImage(drawObj) 
      } 
      } 
     } 
    } 
+0

bloc dans sd_setImageWithURL est exécuté pas trop après le téléchargement @ Daij-Djan – jansma

+0

il est exécuté de manière asynchrone si –

+0

Je sais, j'ai attendu trois minutes, mais quand je l'exécute à nouveau, l'image est apparue – jansma