Cortar a interface do usuário

Recebo imagens com resolução de 1920x1080. Estou tentando recortá-los na área central do quadrado (ou seja, 1080x1080 no centro). A resolução pode mudar no futuro. Seria possível cortar a imagem dessa maneira? Tentei algumas coisas postadas no SO, mas sempre recebo uma imagem de 660x1080 se tentar recortar e centralizar. Aqui está uma imagem representando o que eu quero alcançar.

Basicamente, o vermelho é original, o verde é o que eu quero e o amarelo está apenas mostrando as linhas mixX e midY.

O código que eu tentei.

func imageByCroppingImage(image: UIImage, toSize size: CGSize) -> UIImage{
    let newCropWidth: CGFloat?
    let newCropHeight: CGFloat?

    if image.size.width < image.size.height {
        if image.size.width < size.width {
            newCropWidth = size.width
        } else {
            newCropWidth = image.size.width
        }
        newCropHeight = (newCropWidth! * size.height) / size.width
    } else {
        if image.size.height < size.height {
            newCropHeight = size.height
        } else {
            newCropHeight = image.size.height
        }
        newCropWidth = (newCropHeight! * size.width) / size.height
    }

    let x = image.size.width / 2.0 - newCropWidth! / 2.0
    let y = image.size.height / 2.0 - newCropHeight! / 2.0

    let cropRect = CGRect(x: x, y: y, width: newCropWidth!, height: newCropHeight!)
    let imageRef = image.cgImage!.cropping(to: cropRect)

    let cropped = UIImage(cgImage: imageRef!, scale: 1.0, orientation: .right)
    return cropped
}

E então passo esse método como CGSize (1080, 1080). Recebo uma imagem de 660, 1080. Alguma idéia?

A intenção é cortar a imagem, não apenas exibi-la centralizada.

questionAnswers(1)

yourAnswerToTheQuestion