Могу ли я испечь / сгладить UIImageView, включая его слой с закругленными углами и масками

#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. Я просто пропустил этот вызов. Спасибо.