Я пытаюсь нарисовать пару UIImage
с UIView
, и я делаю это вручную с drawRect:
. Учитывая, что изображения динамически загружаются из Интернета, я создаю NSOperation
и выполняю код загрузки изображений из второго потока, чтобы обеспечить отзывчивость пользовательского интерфейса. Поэтому после загрузки изображений они появляются на экране.
Но ... Я получаю следующие ошибки для каждого из изображений:
<Error>: CGContextSaveGState: invalid context 0x0
<Error>: CGContextSetBlendMode: invalid context 0x0
<Error>: CGContextSetAlpha: invalid context 0x0
<Error>: CGContextTranslateCTM: invalid context 0x0
<Error>: CGContextScaleCTM: invalid context 0x0
<Error>: CGContextDrawImage: invalid context 0x0
<Error>: CGContextRestoreGState: invalid context 0x0
Для того, что я видел, это означает, что контекст, в котором я пытаюсь сделать [image drawInRect...]
, равен nil
, потому что я больше не в drawRect:
.
Попытка сделать
UIGraphicsPushContext(UIGraphicsGetCurrentContext());
до рисования изображения, но ничего не изменилось. Как я могу преодолеть эту вещь? Многопоточность необходима для оперативности, и контекст теряется.
ОБНОВЛЕНИЕ: Вот мой код:
- (void)drawContentView:(CGRect)r
{
CGContextRef context = UIGraphicsGetCurrentContext();
....
CGContextFillRect(context, r);
UIApplication* app = [UIApplication sharedApplication];
app.networkActivityIndicatorVisible = YES;
NSOperationQueue *queue = [NSOperationQueue new];
NSInvocationOperation *operation = [[NSInvocationOperation alloc]
initWithTarget:self
selector:@selector(loadPreview)
object:nil];
[queue addOperation:operation];
[operation release];
}
А потом
-(void)loadPreview
{
self.preview = [UIImage imageWithData: [NSData dataWithContentsOfURL: [NSURL URLWithString:self.picStringPreview]]];
[self.preview drawInRect:CGRectMake(256, 18, 80, 65)];
}
Я попытался добавить UIGraphicsPushContext...
в loadPreview
, даже сделал [self performSelectorOnMainThread...]
там, и ничего. И это пользовательская ячейка, основанная на модели Atebit, поэтому суперкласс моей ячейки составляет:
- (void)drawRect:(CGRect)r
{
[(ABTableViewCell *)[self superview] drawContentView:r];
}
и код в drawContentView:
получает draw'd в drawRect:
суперкласса. Любой намек?