Предположим, что у вас есть CGSize origSize
, который является исходным размером (например, 768x1024), и CGSize size
, который является требуемым размером, это можно сделать так:
CGFloat scaleX = size.width / origSize.width;
CGFloat scaleY = size.height / origSize.height;
UIGraphicsBeginImageContextWithOptions(origSize, NO, scaleX > scaleY ? scaleY : scaleX);
[canvas.layer renderInContext:UIGraphicsGetCurrentContext()];
result = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
Обратите внимание, что мы используем origSize
в начальном контексте, а не size
. Масштаб также влияет на размер.
Обновление (примерно через год): обратите внимание, что этот метод мешает (или мешает) преобразованиям на моментальном снимке UIView
. Если вышеприведенное не работает, и вы выполняете масштабное преобразование в представлении (или его слое), вы можете использовать следующее решение: Как уменьшить UIImage и сделать его одновременно четким и резким размыто?