1

当一个按钮被触摸时,我试图在 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;
}
4

2 回答 2

1

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

于 2011-09-26T13:51:36.510 回答
1

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

在这里正确回答了相同(或非常相似)的问题:

在我的 UIImageView 的子类中没有调用 drawRect

UIImageViewdrawRect如果您调用他们的类(它是子类),请不要调用它们setNeedsDisplay

于 2012-03-04T20:53:31.790 回答