Как создать изображение из UILabel?

В настоящее время я разрабатываю простой фотошоп, например приложение на iphone. Когда я хочу сгладить свои слои, ярлыки находятся в хорошем положении, но с плохим размером шрифта. Вот мой код, чтобы сгладить:

UIGraphicsBeginImageContext(CGSizeMake(widthDocument,widthDocument)); for (UILabel *label in arrayLabel) { [label drawTextInRect:label.frame]; } UIImage *image = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); 

Кто-нибудь может мне помочь?

От: вытаскивание UIImage из UITextView или UILabel дает белое изображение .

// iOS

 - (UIImage *)grabImage { // Create a "canvas" (image context) to draw in. UIGraphicsBeginImageContextWithOptions(self.bounds.size, self.opaque, 0.0); // high res // Make the CALayer to draw in our "canvas". [[self layer] renderInContext: UIGraphicsGetCurrentContext()]; // Fetch an UIImage of our "canvas". UIImage *image = UIGraphicsGetImageFromCurrentImageContext(); // Stop the "canvas" from accepting any input. UIGraphicsEndImageContext(); // Return the image. return image; } 

// Быстрое расширение w / использование. кредит @Heberti Almeida в комментариях ниже

 extension UIImage { class func imageWithLabel(label: UILabel) -> UIImage { UIGraphicsBeginImageContextWithOptions(label.bounds.size, false, 0.0) label.layer.renderInContext(UIGraphicsGetCurrentContext()!) let img = UIGraphicsGetImageFromCurrentImageContext() UIGraphicsEndImageContext() return img } } 

Использование:

 let label = UILabel(frame: CGRect(x: 0, y: 0, width: 30, height: 22)) label.text = bulletString let image = UIImage.imageWithLabel(label) 

Я создал расширение Swift, чтобы сделать UILabel в UIImage :

 extension UIImage { class func imageWithLabel(label: UILabel) -> UIImage { UIGraphicsBeginImageContextWithOptions(label.bounds.size, false, 0.0) label.layer.renderInContext(UIGraphicsGetCurrentContext()!) let img = UIGraphicsGetImageFromCurrentImageContext() UIGraphicsEndImageContext() return img } } 

EDIT: улучшенная версия Swift 4

 extension UIImage { class func imageWithLabel(_ label: UILabel) -> UIImage { UIGraphicsBeginImageContextWithOptions(label.bounds.size, false, 0) defer { UIGraphicsEndImageContext() } label.layer.render(in: UIGraphicsGetCurrentContext()!) return UIGraphicsGetImageFromCurrentImageContext() ?? UIImage() } } 

Использование прост:

 let label = UILabel(frame: CGRect(x: 0, y: 0, width: 30, height: 22)) label.text = bulletString let image = UIImage.imageWithLabel(label) 

вам нужно отобразить метку в контексте

замещать

 [label drawTextInRect:label.frame]; 

с

 [label.layer renderInContext:UIGraphicsGetCurrentContext()]; 

и вам нужно будет создать одно изображение на ярлык, поэтому переместите цикл for за пределы начальных и конечных контекстных вызовов

для Swift я использую это расширение UIView:

 // Updated for Swift 3.0 extension UIView { var grabbedImage:UIImage? { get { UIGraphicsBeginImageContextWithOptions(bounds.size, false, 0.0) layer.render(in: UIGraphicsGetCurrentContext()!) let img = UIGraphicsGetImageFromCurrentImageContext() UIGraphicsEndImageContext() return img } } } 

Вы можете использовать renderInContext для любого CALayer. Он нарисует слой вашего представления в контексте. Чтобы вы могли изменить его на изображение. Также, если вы сделаете renderInContext в представлении, все его подпрограммы будут нарисованы в контексте. Поэтому вместо повторения всех ярлыков, добавляя метки, вы можете добавить их в контейнер. И просто нужно сделать renderInContext в этом контейнере.

  • Изменить цвет курсора в UITextField
  • Плохой URL-адрес при запросе с помощью NSURL
  • Ошибка Apple Mach-O Linker при компиляции для устройства
  • Как вы вычисляете день года на определенную дату в Objective-C?
  • Получить значение RGB из пресетов UIColor
  • Как сделать ui отзывчивым все время и делать обновление фона?
  • Как создать глобальные функции в Objective-C
  • Как скопировать объект в объекте c
  • Как я могу заставить UITextField двигаться вверх, когда клавиатура присутствует?
  • Использование iPhone - dequeueReusableCellWithIdentifier
  • UIWebView - Как определить последнее сообщение webViewDidFinishLoad?
  • Interesting Posts

    Связывание нескольких ComboBox с одним списком – Проблема: когда я выбираю элемент, все комбинированные поля меняются

    Почему ZIP Compression ничего не сжимает?

    jQuery Перетаскивание с использованием живых событий

    Обработчики событий jQuery всегда выполняются так, чтобы они были связаны – каким-то образом?

    Не пытайтесь ли вы блокировать блокировки, если исключения не выбрасываются?

    Раскладка клавиатуры в случайном порядке в Windows 8

    Будет ли используемый оператор откат транзакции базы данных при возникновении ошибки?

    Скачать карты для osmdroid

    Каков наилучший инструмент для измельчения файлов на карте памяти?

    Задача не сериализуема: java.io.NotSerializableException при вызове функции закрытие только для classов не объектов

    Зачем использовать fragmentы?

    Как имитировать полное внешнее соединение в Excel?

    android: actionBarStyle требует уровня API 11

    Как принудительно удалить файл в Windows 7?

    Какое преимущество заключается в использовании $ timeout в AngularJS вместо window.setTimeout?

    Давайте будем гением компьютера.