Я создаю приложение, в котором можно обрезать несколько изображений до одного указанного c размера.
У меня есть массив с несколькими изображениями. Изображения массива были отображены в виде, где я могу перетащить их внутрь вида. Я использую одно и то же изображение дважды. Это выглядит так:
У меня также есть вид обрезки (отображается красным только для демонстрации). Изображения должны быть обрезаны до размера обрезки:
Конечный результат выглядит следующим образом:
Было несколько проблем. Я не понимаю, почему изображение поворачивается. Также кажется, что изображение не обрезано до созданного мной вида обрезки (красный вид). Также изображения должны иметь небольшую задержку, потому что я перетаскиваю каждое из них в другое место в представлении.
Метод, который я использую, взят из документации на яблоки:
let cropRect = CGRect(x: cropView.frame.origin.x, y: cropView.frame.origin.y, width: cropView.frame.width, height: cropView.frame.height)
let croppedImage = ImageCrophandler.sharedInstance.cropImage(imageContentView[i].image!, toRect: cropRect, viewWidth: cropView.frame.width, viewHeight: cropView.frame.height)
print(croppedImage)
arrayOfCropedImages.append(croppedImage!)
func cropImage(_ inputImage: UIImage, toRect cropRect: CGRect, viewWidth: CGFloat, viewHeight: CGFloat) -> UIImage? {
let imageViewScale = max(inputImage.size.width / viewWidth,
inputImage.size.height / viewHeight)
// Scale cropRect to handle images larger than shown-on-screen size
let cropZone = CGRect(x:cropRect.origin.x * imageViewScale,
y:cropRect.origin.y * imageViewScale,
width:cropRect.size.width * imageViewScale,
height:cropRect.size.height * imageViewScale)
// Perform cropping in Core Graphics
guard let cutImageRef: CGImage = inputImage.cgImage?.cropping(to:cropZone)
else {
return nil
}
// Return image to UIImage
let croppedImage: UIImage = UIImage(cgImage: cutImageRef)
return croppedImage
}