Очень простой способ изменить размеры 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