2016-05-15 6 views
1

Существует UIImageView внутри UIScrollView, который пользователь может масштабировать его вниз и вверх, а затем сохранить его:Дополнительное белое пространство, когда получают видимое содержание UIScrollView

enter image description here

площадь под навигационной панели и верхняя часть панель вкладок есть UIScrollView рама.

Когда пользователь нажимает Выполнено, изображение будет сохранено в рулоне камеры. Это то, что там сохранилось (Приложение для фотографий): enter image description here

Я не знаю, что это за пустое пространство в сохраненном изображении.

Это мой код, чтобы сохранить изображение:

UIGraphicsBeginImageContextWithOptions(scrollView.frame.size, false, 0.0) 
      let rect = CGRectMake(0, scrollView.frame.origin.y, scrollView.frame.size.width, scrollView.frame.size.height) 
      self.view.drawViewHierarchyInRect(rect, afterScreenUpdates: true) 
      let image = UIGraphicsGetImageFromCurrentImageContext() 
      let imageData = UIImageJPEGRepresentation(image, 1) 
      let compressedJPGImage = UIImage(data: imageData!) 
      UIImageWriteToSavedPhotosAlbum(compressedJPGImage!, nil, nil, nil) 

То, что я хочу, чтобы сохранить именно видимая область UIScrollView.

ответ

0

мне пришлось использовать CGContextTranslateCTM(), чтобы перевести прямоугольник:

let screenRect: CGRect = scrollView.bounds 
    UIGraphicsBeginImageContext(screenRect.size) 
    let ctx: CGContextRef = UIGraphicsGetCurrentContext()! 
    CGContextTranslateCTM(ctx,0,-scrollView.frame.origin.y) 
    UIColor.blackColor().set() 
    CGContextFillRect(ctx, screenRect) 
     view.layer.renderInContext(ctx) 
    let image: UIImage = UIGraphicsGetImageFromCurrentImageContext() 
    UIGraphicsEndImageContext()