2015-08-15 2 views
0

Я хочу использовать SDWebImage, чтобы загрузить изображение с URL и использовать его в UIView (использование cgcontext), но когда загрузка завершена, то ничего не произойдетКак использовать SDWebImage нарисовать изображение в 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) 
      } 
     } 
    } 

теперь я пытаюсь снова запустить функцию drawImage (тот же url) изображение появляется в UIView

Как нарисовать его в UIView при завершении погружения?

ответ

0

, если я его правильно, вы хотите сделать SDWebImage когда DrawRect называется

теперь вопрос ...... рисунок должен быть синхронным. вы не можете просто нарисовать экран в любое удобное для вас время: D, который вы пытаетесь и не видите.

(вы должны изменить 'идею' весь так, что вы на самом деле РИСОВАТЬ, когда просят (когда DrawRect называется)

например

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 // сохранить его! }

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

блок в sd_setImageWithURL не запускается слишком после загрузки @ DAij-Джан – jansma

+0

он выполняется асинхронно, хотя –

+0

Я знаю, я жду три минуты, но когда я запустил его снова, появится изображение – jansma