В этом фрагменте предполагается, что у вас есть UImage с именем bottomImage для базового изображения, которое будет нарисовано, и topImage, которое будет нарисовано НА (над) bottomImage.xpos, ypos - это числа с плавающей точкой, описывающие целевую позицию x, y (вверху слева), в которой будет отображаться topImage, и targetSize размер, в котором будет отображаться topImage на bottomImage.
...
UIGraphicsBeginImageContext( bottomImage.size );//create a new image context to draw offscreen
[bottomImage drawInRect:CGRectMake(0,0,bottomImage.size.width,bottomImage.size.height)];//draw bottom image first, at original size
[topImage drawInRect:CGRectMake(xpos,ypos,targetSize.width,targetSize.height) blendMode:kCGBlendModeNormal alpha:1];//draw the image to be overlayed second, at wanted location and size
UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();//get newly drawn image context into a UIImage
UIGraphicsEndImageContext();//stop drawing to the context
return newImage;//return/use the newly created image
Это не безопасно для потоков- создание UIImage в потоке не рекомендуется.