Контекст, созданный с использованием UIGraphicsPushContext, не отображает визуализированные изображения.

Я использую UIGraphicsPushContext для отправки контекста внутрь drawRect следующим образом:

- (void)drawRect:(CGRect)rect {
  // Create Bitmap Graphics Context
  UIContextRef ctxt = //blah blah;
  // Push the custom context in the graphics stack
  UIGraphicsPushContext(ctxt);
  // Draw Stuff
  // Get Image from custom context
} 

Моя проблема в том, что изображение не отображается на экране (в представлении), но я могу подтвердить, что успешно нарисовал контекст, поскольку изображение, полученное из контекста, показывает изображение, похожее на то, что я намеревался нарисовать.

Чего я хотел добиться, так это заменить мой вызов UIGraphicsGetCurrentContext() (который работает и показывает изображение) и использовать (push) пользовательский контекст, который я могу использовать.

Я что-то упустил здесь? Спасибо!


person LaN    schedule 26.10.2010    source источник
comment
Чего именно вы пытаетесь достичь? Если вы хотите рисовать в представлении, вы должны использовать UIGraphicsGetCurrentContext().   -  person loomer    schedule 26.10.2010
comment
Я хотел, чтобы он рисовался в пользовательском контексте, а не в контексте, данном мне из drawRect, чтобы я мог контролировать растровую память и повторно использовать один и тот же контекст.   -  person LaN    schedule 27.10.2010


Ответы (2)


Если вы хотите нарисовать изображение, а затем также показать его в представлении, вам нужно либо нарисовать его в представлении, а затем также изображение, либо сначала нарисовать изображение, а затем нарисовать это изображение в представлении. Чтобы реализовать второй вариант, сделайте что-то вроде этого:

- (void)drawRect:(CGRect)rect {
    // Create image
    UIGraphicsBeginImageContext(rect.size);
    CGContextRef ctx = UIGraphicsGetCurrentContext();

    // Draw the image content using ctx

    UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();

    // Draw image on view
    [image drawAtPoint:CGPointZero];
}
person loomer    schedule 27.10.2010
comment
хм, я знаю, что могу это сделать, и это не отвечает на мой вопрос. И drawAtPoint и CGContextDrawImage имеют тенденцию быть медленными на экранах с высокой плотностью пикселей. Спасибо, в любом случае :) - person LaN; 28.10.2010
comment
хорошо, тогда единственное решение, которое я вижу, это рисовать сначала в представлении, а затем в контексте изображения. Но может быть и так, что я все еще не понимаю вашего вопроса :) - person loomer; 28.10.2010

Я думаю, вы пропустите это:

- (void)drawRect:(CGRect)rect {
  // Create Bitmap Graphics Context
  UIContextRef ctxt = //blah blah;
  // Push the custom context in the graphics stack
  UIGraphicsPushContext(ctxt);
  // Draw Stuff
  // Get Image from custom context

  //blah blah

  UIGraphicsPopContext();
}

использование UIGraphicsPopContext() для восстановления предыдущего контекста

person youshunei    schedule 23.07.2011