UIImage от CALayer – iPhone SDK

В моем приложении я создал CALayer (с несколькими подслоями – CALayer состоит из форм, добавленных в качестве подслоев).

Я пытаюсь создать UIImage который я смогу загрузить на сервер (у меня есть код для этого). Однако я не могу понять, как добавить CALayer в UIImage .

Это возможно? Любой совет будет отличным и очень оцененным.

Большое спасибо, Бретт

Похоже, вы хотите сделать свой слой в UIImage. В этом случае метод ниже должен сделать трюк. Просто добавьте это в свой class просмотра или controllerа или создайте категорию на CALayer.

 - (UIImage *)imageFromLayer:(CALayer *)layer { UIGraphicsBeginImageContextWithOptions(layer.frame.size, NO, 0); [layer renderInContext:UIGraphicsGetCurrentContext()]; UIImage *outputImage = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); return outputImage; } 

Ответ Тодда верный, однако для экранов сетчатки должна быть небольшая разница:

 - (UIImage *)imageFromLayer:(CALayer *)layer { if ([[UIScreen mainScreen] respondsToSelector:@selector(scale)]) UIGraphicsBeginImageContextWithOptions([layer frame].size, NO, [UIScreen mainScreen].scale); else UIGraphicsBeginImageContext([layer frame].size); [layer renderInContext:UIGraphicsGetCurrentContext()]; UIImage *outputImage = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); return outputImage; } 

Для этого я создал расширение Swift:

 extension UIImage { class func imageWithLayer(layer: CALayer) -> UIImage { UIGraphicsBeginImageContextWithOptions(layer.bounds.size, layer.opaque, 0.0) layer.renderInContext(UIGraphicsGetCurrentContext()!) let img = UIGraphicsGetImageFromCurrentImageContext() UIGraphicsEndImageContext() return img } } 

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

 var gradient = CAGradientLayer() gradient.colors = [UIColor.redColor().CGColor, UIColor.blueColor().CGColor] gradient.frame = CGRect(x: 0, y: 0, width: 200, height: 200) let image = UIImage.imageWithLayer(gradient) 

Swift 3 с небольшим количеством ошибок проверки контекста.

 extension UIImage { class func image(from layer: CALayer) -> UIImage? { UIGraphicsBeginImageContextWithOptions(layer.bounds.size, layer.isOpaque, UIScreen.main.scale) defer { UIGraphicsEndImageContext() } // Don't proceed unless we have context guard let context = UIGraphicsGetCurrentContext() else { return nil } layer.render(in: context) return UIGraphicsGetImageFromCurrentImageContext() } } 
  • Как я могу программно приостановить NSTimer?
  • Что делает флаг компоновщика -all_load?
  • Возвратитесь к поведению приложения после разговора по телефону в собственном коде, чем UIWebView
  • Как получить подстроку NSString?
  • Когда происходит освобождение связанного объекта?
  • UISlider для управления AVAudioPlayer
  • Перемещение фигуры Stick, опорных точек, анимации или чего-то еще ...?
  • Когда вы делаете подчеркивание перед переменной экземпляра?
  • Как я могу заставить UITextField двигаться вверх, когда клавиатура присутствует?
  • Ссылка с UITableViewCell на родительский UITableView?
  • Как добавить userInfo в UIAlertView?
  • Interesting Posts

    Расширения Google Chrome – не удается загрузить локальные изображения с помощью CSS

    Как сохранить дубликаты изображений в Excel в разные JPEG-файлы

    Почему Firefox не поддерживает формат файла MP3 в

    Загрузки HTTP / стойка после 1-5 МБ

    Разница в поведении при использовании dynamic_cast со ссылкой и указателями

    Максимальный размер HashSet, Vector, LinkedList

    Как сократить локальные ветви отслеживания, которые больше не существуют на удаленном компьютере

    Публикуйте определенную информацию для Meteor.users и дополнительную информацию для Meteor.user

    Как изменить цвет заголовка по умолчанию в iTerm2

    Облачные сообщения Google в Delphi XE5?

    Как получить UIImage из EAGLView?

    Django: установить внешний ключ с помощью целого числа?

    Symfony2: как вручную вывести пользователя вручную в controller?

    Как преобразовать целочисленный пиксель get.rgb (x, y) в цвет (r, g, b, a) в Java?

    Android: Как растянуть изображение до ширины экрана при сохранении пропорций?

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