2017-02-19 3 views
0

Я видел на Stackoverflow дюжину подобных вопросов.Слияние изображения с уменьшенным изображением с изображениями из подпунктов, оставшихся в исходном размере

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

enter image description here

Как вы можете видеть, у меня есть Photo Scroll View с Photo View внутри. Каждая добавленная наклейка входит в Photo Scroll View в качестве подзаголовка.

Теперь, как я могу объединить все изображения с Photo Scroll View в одно изображение. До сих пор мне удалось сохранить его с размером экрана, который определенно слишком мал.

func saveImage(_ sender: Any) { 

    //Create the UIImage 
    UIGraphicsBeginImageContext(photoScrollView.frame.size) 
    photoScrollView.layer.render(in: UIGraphicsGetCurrentContext()!) 
    let image = UIGraphicsGetImageFromCurrentImageContext()! 
    UIGraphicsEndImageContext() 

    //Save it to the camera roll 
    UIImageWriteToSavedPhotosAlbum(image, nil, nil, nil) 

} 

Кроме того, я попробовал его, создав снимок. В этом случае изображение содержало только белый экран и ничего больше (и это не цвет фона любого вида).

func saveImage(_ sender: Any) { 

    let snapShot:UIView = self.photoScrollView.snapshotView(afterScreenUpdates: true)! 
    UIGraphicsBeginImageContext(self.photoScrollView.bounds.size) 
    snapShot.drawHierarchy(in: self.photoScrollView.bounds, afterScreenUpdates: true) 

    let image:UIImage = UIGraphicsGetImageFromCurrentImageContext()! 
    UIImageWriteToSavedPhotosAlbum(image, nil, nil, nil) 

} 

Может ли кто-нибудь мне помочь?

+0

Использование первой попытки, вызовите 'photoScrollView.draw (Прямоугольник: photoScrollView.frame)' –

+0

@gkchristopher я заменил 'photoScrollView.layer.render (в: UIGraphicsGetCurrentContext()!) 'с' photoScrollView.draw (rect: photoScrollView.frame) '. Не помогло. Результат - это просто белое изображение, а фон 'photoScrollView' - зеленый. –

ответ

0

После того, как я попытался выполнить различные подходы, я нашел решение, обернув Photo View внутри простого UIView (я называю это placeholderView). Все добавленные изображения я помещаю внутри placeholderView в качестве подзонов, чтобы они находились на том же уровне, что и photoView.

В результате у меня есть структура: Photo Scroll View -> placeholderView-> ALL_OTHER_SUBVIEWS. состоит из фоновой фотографии и добавленных изображений поверх нее.

И код выглядит следующим образом:

@IBAction func saveImage(_ sender: Any) { 

    //Create the UIImage 
    let zoomVal = photoScrollView.zoomScale 
    photoScrollView.zoomScale = 1.0 

    UIGraphicsBeginImageContext(placeholderView.frame.size) 
    placeholderView.layer.render(in: UIGraphicsGetCurrentContext()!) 
    let image = UIGraphicsGetImageFromCurrentImageContext()! 
    UIGraphicsEndImageContext() 
    photoScrollView.zoomScale = zoomVal 
    //Save it to the camera roll 
    UIImageWriteToSavedPhotosAlbum(image, nil, nil, nil) 

} 
Смежные вопросы