如何使用SDWebImage在cgcontext中绘制图像

时间:2015-08-15 11:22:40

标签: ios swift cgcontext sdwebimage

我想使用SDWebImage下载带有url的图像并在UIView中绘制(使用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中绘制它?

1 个答案:

答案 0 :(得分:0)

如果我做对了,你想在调用drawRect时绘制SDWebImage

现在的问题是......绘图必须是同步的。你不能随时随地画画:D这是你正在尝试而不是看到的。

(你需要更改整个'想法,以便在被要求时实际绘制(当调用drawRect时)

e.g。

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)
            }
          }
       }
   }