Ich versuche, Code zu schreiben, damit die Kamera nur quadratische Bilder von meiner App auf einem iPad macht. Ich habe hier eine Lösung gefunden, die ich von Objective-C nach Swift übersetzt habe, aber nachdem ich ein Bild mit dem Code gemacht habe, reagieren die "Use Photo" - und "Reake" -Buttons nicht auf Berührung, es sei denn, ich drehe das iPad um 90 Grad Drücke den Knopf im Querformat. Dies ist natürlich ziemlich unerwünscht. Irgendwelche Hinweise, wie ich meinen Code reparieren könnte, wären fantastisch.Probleme mit der Lösung zum programmgesteuerten Beschneiden eines Bildes auf ein Quadrat
@IBAction func takePicture(sender: UIButton)
{
let alertController = UIAlertController(title: nil, message: nil, preferredStyle: UIAlertControllerStyle.ActionSheet)
let takePictureAction = UIAlertAction(title: "Take Picture", style: UIAlertActionStyle.Default)
{ (alertAction: UIAlertAction!) -> Void in
let picker = UIImagePickerController()
picker.delegate = self
picker.sourceType = .Camera
var f: CGRect
f = picker.view.bounds
//f.size.width -= picker.navigationBar.bounds.size.width
f.size.height -= picker.navigationBar.bounds.size.height
var barHeight: CGFloat
barHeight = (f.size.height - f.size.width)/2
UIGraphicsBeginImageContext(f.size)
var edgeColor: UIColor
edgeColor = UIColor(white: 0, alpha: 0.5)
edgeColor.set()
UIRectFillUsingBlendMode(CGRectMake(0, 0, f.size.width, barHeight), CGBlendMode.Normal)
UIRectFillUsingBlendMode(CGRectMake(0, f.size.height - barHeight, f.size.width, barHeight), CGBlendMode.Normal)
var overlayImage: UIImage
overlayImage = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
let overlayIV = UIImageView(frame: f)
overlayIV.image = overlayImage
picker.cameraOverlayView?.addSubview(overlayIV)
self.presentViewController(picker, animated: true, completion: nil)
}
let chooseExistingPicture = UIAlertAction(title: "Use Existing", style: UIAlertActionStyle.Default) {(alertAction: UIAlertAction!) -> Void in
let picker = UIImagePickerController()
picker.delegate = self
picker.sourceType = .PhotoLibrary
self.presentViewController(picker, animated: true, completion: nil)
}
alertController.addAction(takePictureAction)
alertController.addAction(chooseExistingPicture)
alertController.view.tintColor = UIColor.blackColor()
presentViewController(alertController, animated: true, completion: nil)
let presentationController = alertController.popoverPresentationController
presentationController?.sourceView = self.view
presentationController?.sourceRect = CGRectMake(330, 210, 330, 210)
}
func imagePickerController(picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : AnyObject])
{
var image = info[UIImagePickerControllerOriginalImage]
let imageSize = image?.size
let width = Double((imageSize?.width)!)
let height = Double((imageSize?.height)!)
if width != height {
let newDimension = min(width, height)
let widthOffset = (width - newDimension)/2
let heightOffset = (height - newDimension)/2
UIGraphicsBeginImageContextWithOptions(CGSizeMake(CGFloat(newDimension), CGFloat(newDimension)), false, 0.0)
image?.drawAtPoint(CGPointMake(CGFloat(-widthOffset), CGFloat(-heightOffset)))
image = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
}
CustomPicture.image = image as? UIImage;
dismissViewControllerAnimated(true, completion: nil)
}
Die Zeile "f.size.height - = picker.navigationBar.bounds.size.height" soll das beheben. Da das Overlay aus irgendeinem Grund die Buttons immer noch etwas überlappen ließ, habe ich es mit "f.größe.height - = 2 * picker.navigationBar.bounds.size.height" versucht und den Overlay-Hintergrund blau eingefärbt. Sicher, die Schaltflächen "Wiederholen" und "Foto verwenden" sind nicht durch das Overlay abgedeckt, funktionieren aber immer noch nicht. Es ergibt jedoch keinen Sinn, was du sagst, macht Sinn. Warum blockiert das Overlay die Verwendung der Schaltfläche, wenn sie die Schaltflächen nicht abdeckt? –
Färben Sie auch das übergeordnete Element Ihrer Ansicht –
Sie können den Ansicht-Debugger in Xcode verwenden, um herauszufinden, was passiert: https://developer.apple.com/library/ios/documentation/ToolsLanguages/Conceptual/Xcode_Overview/ExaminingtheViewHierarchy.html –