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

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

0 голосов
/ 26 сентября 2011

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

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

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

вот мой код:

-(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 ]

1 голос
/ 05 марта 2012

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

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

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

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

1 голос
/ 26 сентября 2011

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

...