Наложение меньшего прямоугольника на UIImage

Я хочу наложить прямоугольник на изображение. Этот код ниже в настоящее время работает, но он возвращает прямоугольник с тонкой рамкой. Я не могу изменить ширину прямоугольника. Один из способов вернуть пользовательский прямоугольник с более толстой рамкой — использовать UIView, но невозможно добавить SubView в UIImage. Любое решение для этого? Спасибо.

-(UIImage *)drawRectangleOnImage:(UIImage *)img rect:(CGRect)rect{

CGSize imgSize = img.size;
CGFloat scale = 0;
UIGraphicsBeginImageContextWithOptions(imgSize, NO, scale);
[img drawAtPoint:CGPointZero];
[[UIColor redColor] setStroke];
UIRectFrame(rect);
UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return newImage;

}

«невозможно добавить SubView в UIImage» неверно. Конструктор интерфейсов не позволит вам это сделать, но нет проблем с добавлением подпредставления к UIImage в коде.

Pylyp Dukhov 24.03.2022 11:28
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
1
36
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

UIRectFrame рисует рамку внутри указанного прямоугольника. Если вы хотите вместо этого заполнить область, вы можете использовать UIRectFill.

Чтобы изменить цвет обводки и/или заливки, вы можете вызвать -setStroke или -setFill на UIColor. Например:

[[UIColor red] setFill];
UIRectFill(rect);

Чтобы установить ширину линии обводки, вам нужно установить ширину линии в текущем CGContext:

CGContextRef context = UIGraphicsGetCurrentContext();
CGContextSetLineWidth(context, 10);

Редактировать: Есть еще более простой способ: NSFrameRectWithWidth позволяет вам напрямую указывать ширину вместо того, чтобы устанавливать ширину линии в контексте.

Нет, мне не нужен заполненный прямоугольник. Мне нужна только рамка.

Lor Kam Hoi 24.03.2022 11:09

Я обновил ответ, чтобы он содержал подробности о том, как получить текущий CGContext и изменить ширину строки.

adeasismont 24.03.2022 14:47

@LorKamHoi извините, я еще раз посмотрел, и есть еще более простой способ. Добавил это в мой ответ.

adeasismont 25.03.2022 06:49

Другие вопросы по теме