Ich habe schon seit einiger Zeit damit zu kämpfen. Ich möchte den Bild-Ausschnitt ähnlich dem in iOS selbst aussehen lassen, wenn Sie Ihr Hintergrundbild auswählen. Grundsätzlich möchte ich den Bereich, den Benutzer aus dem Bild mit Zoom und Seitenverhältnis des Bildschirms beschnitten wählt (so kann der Benutzer das Bild als Hintergrund später verwenden). Wie folgt aus:Zuschneiden Teil von UIImage mit dem Bildschirm Seitenverhältnis
https://gfycat.com/TornMaleAlligatorsnappingturtle
Ich habe es geschafft, die Schnittstelle mit UIScrollView und UIImageView zu erstellen: kann
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)
}
}.
ich um das Bild kein Problem Zoom- und Pan. Das Problem ist, dass ich nicht weiß, wie das CGRect-Rechteck erstellt wird, das den Bereich darstellt, der dem Benutzer angezeigt wird. Dies ist auch der Bereich, den ich aus dem Originalbild zuschneiden möchte. Irgendwelche Ideen, die mich aus meinem Elend bringen werden, werden sehr geschätzt!
Das funktioniert gut, aber ich habe Tasten auf dem Bildschirm, die als gut Snapshot von ihr erstellt, auch wenn ich sie über isHidden Eigentum verstecken. – MHCsk
verstecken Sie die Dinge, die Sie nicht Teil des Screenshots @MHCsk –
sein möchte Ich rufe self.cropButton.isHidden = True direkt vor dem Code, aber die Schaltfläche ist immer noch auf dem Snapshot sichtbar. – MHCsk