当触摸按钮时,我试图在dataBuffer的帮助下在UIImage上画一条线,但是没有调用drawRect:.. methode。 (所以,我想画的线不会出现)
我真的不知道问题出在哪里,所以我发布了相当多的代码。对不起。
顺便说一下,我正在开发一个基于视图的应用程序。
这是我的代码:
-(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;
}
答案 0 :(得分:1)
这段代码在哪里? viewDidLoad
是视图控制器方法,drawRect
是视图方法。无论playView是什么(可能是UIImageView?)都需要是一个自定义的UIView子类,里面有drawRect
,你必须将各种项目从视图控制器传递给它。
答案 1 :(得分:1)
我知道这是一个古老的问题但是,有人可能会遇到这个问题:
这里正确回答了相同(或非常类似)的问题:
drawRect not being called in my subclass of UIImageView
如果您致电UIImageView
, drawRect
课程(及其子类)不会致电setNeedsDisplay
。