#ios #cocoa-touch #uitableview #uikit #uiimage
#iOS #cocoa-touch #uitableview #uikit #uiimage
Вопрос:
Я пытаюсь сгладить некоторые изображения, которые я получаю с сервера, до 40 x 40 эскизов, чтобы я мог сохранить их в / Library / Caches и использовать их вместо UIImage UITableViewCell.
До сих пор я знаю, как испечь / сгладить изображение следующим образом:
UIImage *newThumbnail = [UIImage imageWithData:[NSData dataWithContentsOfURL:[NSURL URLWithString:imageURL]]];
UIGraphicsBeginImageContext(CGSizeMake(40, 40));
[newThumbnail drawInRect:CGRectMake(0, 0, 40, 40)];
newThumbnail = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
[UIImagePNGRepresentation(newThumbnail) writeToFile:imageCachePath atomically:YES];
Я также хотел бы включить закругленные углы в сглаженное изображение. Но прямо сейчас я создаю закругленные углы, манипулируя слоем UIImageView, в котором размещается UIImage. Вот так:
imageView.layer.cornerRadius = 7.0;
imageView.layer.masksToBounds = YES;
imageView.layer.borderColor = [UIColor blackColor].CGColor;
imageView.layer.borderWidth = 1.0;
Итак, как мне включить вышеупомянутые модификации слоя во весь механизм UIGraphicsBeginImageContext? Или есть какой-нибудь лучший способ сделать это?
Комментарии:
1. Вы пытались включить вышеуказанные строки в функцию инициализации UIView? Это должно было сработать.
2. Я попытался создать UIImage и включить его в UIImageView, затем установить свойства слоя UIImageView, как указано выше, а затем выполнить контекстное нажатие / всплывающее окно, но свойства слоя (закругленный угол, привязка маски к привязке) не отображаются
Ответ №1:
Вариант (1), который включает в себя больше обучения и больше работы, но является более гибким:
Просмотрите документы CGContextRef.
Рисунок, как нарисовать контур с закругленными углами. (В Интернете есть множество примеров кода, использующих CTM.)
Чтобы имитировать cornerRadius
и masksToBounds
, используйте этот путь, чтобы задать путь отсечения перед рисованием вашего изображения.
Чтобы имитировать borderColor
плюс borderWidth
, установите соответствующий цвет и ширину обводки, а затем обведите этот путь.
Вариант (2):
Попробуйте отобразить ваш UIImageView.layer
контекст с renderInContext:
помощью .
Комментарии:
1. Спасибо за информацию! Тем временем я продолжал пробовать самостоятельно и узнал о renderInContext. Я просто пропустил этот вызов. Спасибо.