У меня есть этот фрагмент кода, который отлично работает на моей стороне, он обрезает изображение на основе размера моего перетаскиваемого UIImageView (который называется cropOverlay
):
func cropImage() {
let rect = CGRect(x: cropOverlay.frame.origin.x, y: cropOverlay.frame.origin.y, width: cropOverlay.frame.size.width, height: cropOverlay.frame.size.height)
UIGraphicsBeginImageContextWithOptions(rect.size, true, 0.0)
originalImgView.layer.render(in: UIGraphicsGetCurrentContext()!)
imageToEdit = UIGraphicsGetImageFromCurrentImageContext()!
UIGraphicsEndImageContext()
originalImgView.image = imageToEdit
resizeImageViewToImageSize(originalImgView)
cropOverlay.frame = originalImgView.frame
print("cropOverlay: \(cropOverlay.frame)")
print("originalImgView: \(originalImgView.frame)")
print("imageToEdit: \(imageToEdit.size.width) - \(imageToEdit.size.height)\n")
}
вот что я получаюв консоли XCode:
cropOverlay: (139.25111636459152, 154.66666666666663, 135.49776727081695, 426.66666666666674)
originalImgView: (139.25111636459152, 154.66666666666663, 135.49776727081695, 426.66666666666674)
imageToEdit: 134.33333333333334 - 423.0
Итак, мой журнал консоли показывает правильные позиции X и Y моего cropOverlay
imageView, а также данные моего originalImageView
кадра.Но проблема в том, что не имеет значения, куда я перемещаю свой cropOverlay
imageView, даже если консоль говорит, что это в X: 139 и Y: 154, изображение, которое я получаю в результате, начинается с X.0 и Y: 0,Проверьте эти скриншоты для лучшего понимания моей проблемы:
ДО
ПОСЛЕПРИМЕНЕНИЕ функции cropImage ()
PS: моя функция resizeImageViewToImageSize(originalImgView)
просто изменяет размер кадра originalImageView
соответственнок его размеру UIImage и центрирует его на экране.
Как вы можете видеть, размер обрезанного изображения правильный, но он начался с X и Y = 0 моего исходного изображения.
Что яделать неправильно в моем коде?
Спасибо!
ОБНОВЛЕНИЕ: Как указано ниже, я отредактировал свою функцию cropImage () следующим образом:
func cropImage() {
let cutImageRef: CGImage = (originalImgView.image!.cgImage?.cropping(to: cropOverlay.frame))!
imageToEdit = UIImage(cgImage: cutImageRef)
originalImgView.image = imageToEdit
resizeImageViewToImageSize(originalImgView)
cropOverlay.frame = originalImgView.frame
}
Но вот результат, который я получаю: