setNeedsDisplay для UIImage не работает

Я пытаюсь нарисовать линию на UIImage с помощью dataBuffer при нажатии кнопки, но метод drawRect: .. не вызывается. (поэтому линия, которую я хочу нарисовать, не появляется)

Я действительно не знаю, где может быть проблема, поэтому я разместил немного больше кода. Извини за это.

Кстати, я работаю над приложением view-based.

вот мой код:

-(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;
}

2 ответа

Я знаю, что это старый вопрос, но все же, кто-то может встретиться здесь:

на тот же (или очень похожий) вопрос здесь правильно ответили:

drawRect не вызывается в моем подклассе UIImageView

UIImageView класс (и это подклассы) не вызывать drawRect если вы называете их setNeedsDisplay,

Где этот код? viewDidLoad это метод контроллера представления, drawRect это метод просмотра. Каким бы ни был playView (предположительно, UIImageView?), Это должен быть пользовательский подкласс UIView с вашим drawRect внутри, и вам придется передавать различные элементы к этому из вашего контроллера представления.

Другие вопросы по тегам