Очень простой способ изменить размеры UIImage:
+ (UIImage *)imageWithImage:(UIImage *)image size:(CGSize)size { UIGraphicsBeginImageContextWithOptions(size, NO, 0.0); [image drawInRect:CGRectMake(0, 0, size.width, size.height)]; UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); return newImage; }
Как же все это происходит?
Сначала подробнее о функции UIGraphicsBeginImageContextWithOptions, она создает новый контекст с заданными параметрами, ее объявление:
void UIGraphicsBeginImageContextWithOptions( CGSize size, BOOL opaque, CGFloat scale );
size — размер нового контекста, opaque — является ли контекст непрозрачным, scale — коэффициент масштабирования.
Дальше все просто. Мы рисуем в новом контексте наше изображение, но уже с новыми размерами. Затем «захватываем» то, что в контексте в UIImage и закрываем контекст.
Чтобы использовать этод метод очень удобно объявить категорию для UIImage:
h-файл
@interface UIImage (UIImage_Resize) + (UIImage *)imageWithImage:(UIImage *)image size:(CGSize)size; @end
m-файл
@implementation UIImage (UIImage_Resize) + (UIImage *)imageWithImage:(UIImage *)image size:(CGSize)size { UIGraphicsBeginImageContextWithOptions(size, NO, 0.0); [image drawInRect:CGRectMake(0, 0, size.width, size.height)]; UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); return newImage; } @end