Насколько я понимаю, ваша проблема проистекает из следующей строки
UIGraphicsPushContext(UIGraphicsGetCurrentContext());
С помощью этого вызова вы пытаетесь сделать текущий контекст текущим контекстом. Это действительно не имеет никакого смысла.
Кроме того, ваш код немного зашифрован, вы вызываете UIGraphicsGetCurrentContext (), который возвращает текущий контекст, затем вызываете UIGraphisBeginImageContext (размер CGSize), как указано в документе
.
Создает растровый графический контекст и делает его текущим контекстом
Затем вы снова получаете текущий графический контекст, который теперь является растровым графическим контекстом благодаря предыдущему вызову, затем вы перезаписываете исходный CGContextRef ("ctx"), который вы только что получили.
Я не уверен на 100%, чего вы хотели достичь с помощью своего кода, но если вы просто пытались захватить содержимое растрового контекста в изображении и сохранить его в фотоальбоме, то следующий код будет сделай это.
CGSize size = CGSizeMake(320, 480); //Screen Size on iPhone device
UIGraphicsBeginImageContext(size); //Create a new Bitmap-based graphics context (also makes this the current context)
CGContextRef screenImageContext = UIGraphicsGetCurrentContext(); //get a reference to the context we just made above
NSLog(@" %@",screenImageContext);
//NOTE: without any drawring code in here this will just be a blank image (white/alpha)
// or an image set to whatever the current UIColor is set to
//So you may want to add some drawing code in here. Although TBH I'm not sure what you were originally
// trying to achieve.
UIImage * result = UIGraphicsGetImageFromCurrentImageContext(); // Returns nil
NSLog(@" %@",result); //just output this to demonstrate that it's non null/nil
UIImageWriteToSavedPhotosAlbum(result, nil, nil, nil);
UIGraphicsEndImageContext(); //Removes the current bitmap-based graphics context from the top of the stack
Надеюсь, это поможет.