Измените размер UIView перед тем, как сделать снимок экрана

#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() , установить для нее новый фрейм, скопировать в него все данные, которые создали это представление, и использовать его вместо этого. Надеюсь, в этом есть смысл. Спасибо за помощь