Не уверен, что это самый эффективный способ, но я думаю, что он должен работать.
Загрузите изображение в UIImageView того размера, который нужен для среза, поэтому в качестве примера рассмотрим изображение 480x320. Позволяет нарезать это на 9 частей, сетку 3х3. Это сделало бы каждый кусок 160х106 (грубо говоря, 320 не делится поровну на 3)
Итак, создайте свой UIImageView размером 160x106, установите для свойства image
полноразмерное изображение. И установите для contentMode
представления изображения значение UIViewContentModeScaleAspectFill
, чтобы области, не находящиеся в представлении, были обрезаны. Я не пробовал это, но я предполагаю, что это даст вам верхний левый угол вашей сетки, позиция 1,1.
Теперь здесь, где вы делаете выбор в зависимости от эффективности / производительности памяти, вам придется проверить, какой из них лучше.
Вариант 1
Продолжайте делать это для каждого среза, но установите рамку UIImage так, чтобы отображалась правильная часть изображения, а остальная часть обрезалась. Таким образом, ваш кадр для позиции 1,2 будет выглядеть как CGRectMake(106, 0, 106, 160)
для позиции 2,2 это будет CGRectMake(106*2, 160, 106, 160)
и т. Д.
Это приводит к тому, что полное изображение загружается в память 9 раз, это может быть или не быть проблемой. Вам нужно будет сделать анализ использования памяти.
Вариант 2
Как только вы создадите свой «срез» в UIImageView, сохраните этот контекст как файл, который вы позже загрузите в соответствующие UIImageViews.
Следующий код демонстрирует один из способов сохранить контекст UIView в UIImage.
UIGraphicsBeginImageContext(yourView.frame.size);
[[yourView layer] renderInContext:UIGraphicsGetCurrentContext()];
UIImage *imageOfView = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
Затем вы сохраните этот UIImage на диск с соответствующим именем, чтобы позже загрузить его в соответствующий фрагмент.