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