0

我试图在dataBuffer的帮助下在UIImage上绘制一行,当按钮被触摸时,但drawRect:.. methode没有被调用。 (所以,我想画的线不会出现)setNeedsDisplay为UIImage不起作用

我真的不知道问题出在哪里,所以我发布了更多的代码。对于那个很抱歉。

顺便说一句,我正在研究一个基于视图的应用程序。

这里是我的代码:

-(void) viewDidLoad{ 
    UIImage *image = [UIImage imageNamed:@"playView2.jpg"]; 
    [playView setImage:image]; 
    [image retain]; 
    offScreenBuffer = [self setupBuffer]; 
} 

- (IBAction)buttonTouched:(id)sender { 
    [self drawToBuffer]; 
    [playView setNeedsDisplay];  
} 

- (void)drawRect:(CGRect)rect{ 
    CGImageRef cgImage = CGBitmapContextCreateImage(offScreenBuffer); 
    UIImage *uiImage = [[UIImage alloc] initWithCGImage:cgImage]; 
    CGImageRelease(cgImage); 
    [uiImage drawInRect: playView.bounds]; 
    [uiImage release]; 
} 



-(void)drawToBuffer { 

//     Red Gr Blu Alpha 
CGFloat color[4] = {1.0, 1.0, 0.0, 1.0}; 

CGContextSetRGBStrokeColor(offScreenBuffer, color[0], color[1], color[2], color[3]); 

CGContextBeginPath(offScreenBuffer); 
CGContextSetLineWidth(offScreenBuffer, 10.0); 
CGContextSetLineCap(offScreenBuffer, kCGLineCapRound); 

CGContextMoveToPoint(offScreenBuffer, 30,40); 
CGContextAddLineToPoint(offScreenBuffer, 150,150); 

CGContextDrawPath(offScreenBuffer, kCGPathStroke); 
} 

-(CGContextRef)setupBuffer{  
    CGSize size = playView.bounds.size; 

    CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB(); 

    CGContextRef context = CGBitmapContextCreate(NULL, size.width, size.height, 8, size.width*4, colorSpace, kCGImageAlphaPremultipliedLast); 

    CGColorSpaceRelease(colorSpace); 
    return context; 
} 

回答

1

这是哪里的代码? viewDidLoad是一个视图控制器方法,drawRect是一个视图方法。无论playView是什么(大概是一个UIImageView?)都需要成为一个自定义的UIView子类,其中包含您的drawRect,并且您必须将各种项目传递给您的视图控制器。

+0

哦,对不起,但我忘了提到这一点, 但你说得对,所有的代码都在viewcontroller.m中,而playView是一个UIImageView。 ;-) hmmm好吧,有没有比改变我的UIImageView UIView子类没有超过的方式,因为我已经有很多基于我​​的UIImageView的代码,我不想更改,如果可能的话。 :D – Kito

+0

好吧,不知道你试图通过缓冲来实现什么,但是你可以将你的缓冲图像传递给imageview,因为它的图像,为你的图像视图的子视图你的线条单独的视图,或尝试子类uiimageview,但不知道这是一个好主意。 – jrturton

+0

其实,我想这样做:(我的一个旧帖子) http://stackoverflow.com/questions/7547807/how-to-set-rgba-color-of-a-pixel-of-an -uiimage 但我真的不知道该怎么做:P 你没有一个好主意吗? :D – Kito

1

我知道这是一个老问题,但仍然有人会在这里遇到:

相同(或非常相似)的问题是正确的在这里找到答案:

drawRect not being called in my subclass of UIImageView

UIImageView类(它是子类)如果你打电话给他们的setNeedsDisplay,不要拨打drawRect