#ios #swift #uiview #uigraphicsimagerenderer
#iOS #быстрый #uiview #uigraphicsimagerenderer
Вопрос:
Я пытаюсь преобразовать an UIView
в an UIImage
, который нужно сохранить в фотоальбом.
До сих пор мне удавалось получить это, но полученное изображение основано на UIView
макете на экране. (например: Портрет или пейзаж)
Моя цель состоит в том, чтобы иметь один и тот же результат (например, квадрат), независимо от того, находится ли UIView
он в портрете или в пейзаже.
Это текущий код, который я использую (я перепробовал множество различных методов)
extension UIView { func image() -gt; UIImage { let imageRenderer = UIGraphicsImageRenderer(bounds: bounds) if let format = imageRenderer.format as? UIGraphicsImageRendererFormat { format.opaque = true } let image = imageRenderer.image { context in return layer.render(in: context.cgContext) } return image } }
Я могу изменить UIImage
размер до нужного размера, но UIView
все равно следует тому, что изначально отображалось на экране.
let f = ergTrainChartView.frame; //Grab current ergTrainChartView.frame = CGRect(x: f.origin.x, y: f.origin.y, width: 365, height: 365)
Моя цель-иметь левое изображение независимо от того, находится ли устройство в портретном или альбомном режиме (iPad или iPhone).
Спасибо.
Комментарии:
1. Вы можете изменить свой код на
UIGraphicsBeginImageContextWithOptions
? Вот как я справляюсь с изменением размера. Если нет, то, возможно, проблема не в UIImage или UIGraphics, а в том, чтобы поместить UIView в контекст так, как вам нужно.2. @dfd Я пытался (и я пытался снова), но не получилось. Я думаю, что это должно быть связано с тем, «что» представляет собой мой UIView. Это основано на
drawRect
том, что, даже если яsetNeedsDisplay()
на этом настаиваю, это не работает. В итоге получилось создать еще одну ссылку на UIView , например:let newView = UIView()
, установить для нее новый фрейм, скопировать в него все данные, которые создали это представление, и использовать его вместо этого. Надеюсь, в этом есть смысл. Спасибо за помощь