2017-01-27 6 views
0

UIImage가 포함 된 UIScrollView가 있습니다. 그 위에 사용자가 이미지를 옮길 수있는 상자가있어 그 부분이 잘립니다.자르기 UIImage에서 사각형 부분

이 스크린 샷은 더 잘 설명 : 그들이 원하는 부분이 그 상자 안에 때까지

enter image description here

그래서 그들은 주변의 이미지를 스크롤 할 수 있습니다.

그런 다음 해당 크기로 scrollView/UIImage를 자르고 자른 이미지를 저장할 수 있기를 원합니다.

매우 열심히해서는 안되지만 나는 스크린 샷, UIGraphicsContext 등을 시도하는 데 많은 시간을 보냈으며 작동하지 않는 것으로 보입니다.

도움 주셔서 감사합니다.

+0

너무 넓습니다. 어떤 부분에 문제가 있습니까? "이미지를 스크롤하십시오"또는 "자르기"? '자르기'의 경우 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() 
    } 

} 

그래서 먼저 imageView와 실제 이미지의 크기를 계산합니다.

그런 다음 사진에 표시된대로 자르기 상자의 CGSize를 만듭니다. 그러나 너비와 높이는 배율 인수로 조정해야합니다. (예 : 280 * 6.5)

전화가 iOS 10.0 for UIGraphicsImageRender를 실행하는지 확인해야합니다. 그렇지 않은 경우 작동하지 않습니다.

자르기 상자 크기로이 값을 초기화하십시오.

이미지는 다음 오프셋되어야하며, 이것은 scrollView의 내용 오프셋을 가져 와서 부정하고 배율 인수를 곱하여 계산됩니다.

그런 다음 그 시점에서 그려진 이미지를 반환하십시오!