我試圖在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;
}
哦,對不起,但我忘了提到這一點, 但你說得對,所有的代碼都在viewcontroller.m中,而playView是一個UIImageView。 ;-) hmmm好吧,有沒有比改變我的UIImageView UIView子類沒有超過的方式,因爲我已經有很多基於我的UIImageView的代碼,我不想更改,如果可能的話。 :D – Kito
好吧,不知道你試圖通過緩衝來實現什麼,但是你可以將你的緩衝圖像傳遞給imageview,因爲它的圖像,爲你的圖像視圖的子視圖你的線條單獨的視圖,或嘗試子類uiimageview,但不知道這是一個好主意。 – jrturton
其實,我想這樣做:(我的一箇舊帖子) http://stackoverflow.com/questions/7547807/how-to-set-rgba-color-of-a-pixel-of-an -uiimage 但我真的不知道該怎麼做:P 你沒有一個好主意嗎? :D – Kito