Проблема в том, что вы используете размер изображения, а не размер кадра представления изображения.Изображение кажется намного больше, чем его изображение, поэтому, когда вы используете размер изображения, размер другого изображения оказывается намного меньше по сравнению с ним, хотя он по-прежнему имеет правильный размер.Вы можете изменить свой фрагмент на это -
UIGraphicsBeginImageContext(image.frame.size);
// Draw the users photo
[image.image drawInRect:CGRectMake(0, 0, image.frame.size.width, image.frame.size.height)];
[overlay.image drawInRect:overlay.frame];
UIImage * resultingImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
Предотвращение потери качества
Хотя приведенный выше метод приводит к потере разрешения, попытка нарисовать родительское изображение вего правильное разрешение может оказать нежелательное влияние на его дочернее изображение, т. е. если наложение не имеет самого высокого разрешения, оно может перестать быть растянутым.Однако вы можете попробовать этот код, чтобы нарисовать его в разрешении родительского изображения (не проверено, дайте мне знать, если у вас есть проблемы) -
float verticalScale = image.image.size.height / image.frame.size.height;
float horizontalScale = image.image.size.width / image.frame.size.width;
CGRect overlayFrame = overlay.frame;
overlayFrame.origin.x *= horizontalScale;
overlayFrame.origin.y *= verticalScale;
overlayFrame.size.width *= horizontalScale;
overlayFrame.size.height *= verticalScale;
UIGraphicsBeginImageContext(image.image.size);
// Draw the users photo
[image.image drawInRect:CGRectMake(0, 0, image.image.size.width, image.image.size.height)];
[overlay.image drawInRect:overlayFrame];
UIImage * resultingImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();