Я предполагаю, что это не -drawRect:
метод в представлении, потому что возвращаемое значение неверно.(-[UIView drawRect:]
возвращает void
, а не UIImage*
.)
Если оно равно в NSView, это означает, что вы должны вызывать его напрямую, чтобы получить возвращаемое значение.Но это означает, что UIKit не настроил графический контекст, как это обычно делается до вызова -drawRect:
для представлений в окне.
Следовательно, вы не должны предполагать, что UIGraphicsGetCurrentContext()
действительный.Вероятно, это ноль (вы проверили?).
Если вам просто нужно изображение: используйте UIGraphicsBeginImageContext()
для создания контекста, затем UIGraphicsGetImageFromCurrentImageContext()
для извлечения UIImage
(нет необходимости в посреднике CGImage
), затем UIGraphicsEndImageContext()
для очистки.
Если вы пытаетесь захватить изображение того, что нарисовал ваш вид: исправьте -drawRect:
, чтобы вернуть void, и найдите какой-то другой способ получить этот UIImageвне поля зрения - либо спрятать его в иваре, либо отправить в другой объект, либо записать в файл, как вам угодно.
Также (менее важно):
Не CGContextRelease(context)
.Вы не создавали, не копировали и не сохраняли его, поэтому не следует его выпускать.
Нет необходимости в последнем CGContextAddLineToPoint()
.CGContextFillPath
неявно закроет вам путь.