Эта проблема довольно раздражает. Кто-нибудь подал отчет об ошибке в Apple?
Тем не менее, вот еще один обходной путь, который, кажется, лучше подходит для решения проблемы более надежно, чем подходы adhoc, которые я вижу здесь (которые не работали для меня). Полезно знать, что режим наложения HardLight такой же, как Overlay, только с двумя переключенными аргументами. И дело в том, что реализация Overlay для iOS не глючит. Поэтому вам нужно передвигаться по рисунку (и, возможно, сделать промежуточный снимок с UIGraphicsGetImageFromCurrentImageContext
или подобным), чтобы вы нарисовали два изображения в переключенном порядке. Таким образом, вы можете использовать Overlay вместо HardLight.
Итак, для вашего примера измените код на:
UIGraphicsBeginImageContext(size);
[effectOverlay drawInRect:rectangle blendMode:kCGBlendModeNormal alpha:0.75];
[sourceImage drawInRect:rectangle blendMode:kCGBlendModeOverlay alpha:1.0];
mainImage.image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
Надеюсь, это поможет.