2017-01-27 15 views
0

У меня есть UIScrollView, который содержит UIImage. Кроме того, это поле, в котором пользователь может перемещать изображение, так что эта часть обрезается.Crop UIImage to square часть

Этот скриншот объясняет это лучше:

enter image description here

Таким образом, они могут прокрутить изображение вокруг, пока часть они хотят не внутри этой коробки.

Я хочу, чтобы иметь возможность обрезать scrollView/UIImage до такого размера и сохранять обрезанное изображение.

Это не должно быть очень сложно, но я потратил много времени на скриншоты, UIGraphicsContext и т. Д., И, похоже, что-то не работает.

Спасибо за помощь.

+0

Слишком широкий. В какой части у вас проблемы: «прокрутить изображение вокруг» или «обрезать»? Если «crop», то почему-то вроде http://stackoverflow.com/questions/158914/cropping-an-uiimage?rq=1 не дублируется? – matt

ответ

-1

Я наконец понял, как заставить его работать. Вот код:

func croppedImage() -> UIImage { 

    let cropSize = CGSize(width: 280, height: 280) 
    let scale = (imageView.image?.size.height)!/imageView.frame.height 
    let cropSizeScaled = CGSize(width: cropSize.width * scale, height: cropSize.height * scale) 

    if #available(iOS 10.0, *) { 
     let r = UIGraphicsImageRenderer(size: cropSizeScaled) 
     let x = -scrollView.contentOffset.x * scale 
     let y = -scrollView.contentOffset.y * scale 
     return r.image { _ in 
      imageView.image!.draw(at: CGPoint(x: x, y: y)) 
     } 
    } else { 
     return UIImage() 
    } 

} 

Поэтому он сначала вычисляет масштаб изображения и фактическое изображение.

Затем он создает CGSize этого поля обрезки, как показано на фотографии. Тем не менее, ширина и высота должны масштабироваться по масштабному коэффициенту. (например, 280 * 6,5)

Вы должны проверить, работает ли телефон iOS 10.0 для UIGraphicsImageRender - если нет, это не сработает.

Инициализируйте это с размером рамки обрезки.

Изображение должно быть затем смещено, и это вычисляется путем получения смещения содержимого прокрутки, его отрицания и умножения на коэффициент масштабирования.

Затем верните изображение, нарисованное в этой точке!