0
私は今かなり長い間苦労してきました。壁紙を選択すると、iOS自体に含まれているものに似た画像の切り取りをしたいと思います。基本的に私は、ユーザーが画面のズームとアスペクト比で画像から切り取った領域を選択します(ユーザーが後で壁紙として画像を使用できるようにします)。このように:画面アスペクト比のUIImageの部分を切り取る
https://gfycat.com/TornMaleAlligatorsnappingturtle
私はUIScrollViewのとUIImageViewとのインタフェースを作成するために管理してきました:
import UIKit
class ViewController: UIViewController, UIScrollViewDelegate {
var scrollView: UIScrollView!
var imageView: UIImageView!
var croppedImage: UIImage?
@IBOutlet weak var cropButton: UIButton! {
didSet{
cropButton.backgroundColor = UIColor.gray
}
}
override func viewDidLoad() {
super.viewDidLoad()
let image = UIImage(named: "mountains")!
imageView = UIImageView(image: image)
imageView.frame = CGRect(origin: CGPoint(x: 0, y: 0), size:image.size)
imageView.contentMode = .scaleAspectFill
scrollView = UIScrollView(frame: view.bounds)
scrollView.backgroundColor = UIColor.black
scrollView.contentSize = imageView.bounds.size
scrollView.delegate = self
setZoomScale()
//centerScrollViewContents()
scrollView.addSubview(imageView)
view.addSubview(scrollView)
view.bringSubview(toFront: cropButton)
}
func viewForZooming(in scrollView: UIScrollView) -> UIView? {
return imageView
}
@IBAction func crop(_ sender: UIButton) {
let rect = CGRect(x: ?, y: ?, width: ?, height: ?)
let croppedCGImage = imageView.image?.cgImage?.cropping(to: rect)
self.croppedImage = UIImage(cgImage: croppedCGImage!)
}
func setZoomScale() {
let imageViewSize = imageView.bounds.size
let scrollViewSize = scrollView.bounds.size
//let widthScale = scrollViewSize.width/imageViewSize.width
let heightScale = scrollViewSize.height/imageViewSize.height
scrollView.minimumZoomScale = heightScale //min(widthScale, heightScale)
scrollView.maximumZoomScale = 3
scrollView.zoomScale = heightScale
print(heightScale)
}
}.
私は何の問題をズームしないと、画像の周りにパンすることができます。問題は、ユーザーに表示される領域を表すCGRect矩形を作成する方法がわからないことです。これは、元のイメージから切り抜く領域でもあります。私の不幸から私を救うどんなアイデアも大変ありがとう!
です。 – MHCsk
スクリーンショットの一部になりたくないものを隠す@MHCsk –
コードの直前でself.cropButton.isHidden = trueを呼び出すが、そのボタンはまだスナップショットに表示されている。 – MHCsk