我想使用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中绘制它?
答案 0 :(得分:0)
如果我做对了,你想在调用drawRect时绘制SDWebImage
现在的问题是......绘图必须是同步的。你不能随时随地画画: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)
}
}
}
}