当你在iOS7上拍照时,有没有一种方法可以让它不使用代码水平翻转



我想知道这是否真的可以做到。我知道我可以翻转UIImageView,但iOS 7上的相机在您选择在UIImageView中显示之前会显示水平翻转的图片。有什么办法解决这种烦恼吗?如果有的话,请告诉我。这可能会让用户非常恼火,因为他们可能不知道更多。编辑:这是我的代码。

        UIImagePickerController *imagePickerController = [[UIImagePickerController alloc] init];
    if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera])
    {
        [imagePickerController setSourceType:UIImagePickerControllerSourceTypeCamera];
    }
    // image picker needs a delegate,
    [imagePickerController setDelegate:self];
    // Place image picker on the screen
    [self presentModalViewController:imagePickerController animated:YES];

根据苹果的UIImagePickerClass参考:,你不能轻易地

重要提示:UIImagePickerController类仅支持纵向模式。该类旨在按原样使用,不支持子类化。此类的视图层次结构是私有的,除了一个例外,不能修改。您可以将自定义视图指定给cameraOverlayView属性,并使用该视图来显示附加信息或管理相机界面和代码之间的交互。

这意味着,如果你想打乱方向,你需要创建自己的相机控制器,并自己处理。查看这个堆栈溢出问题,并回答以下内容。编码快乐!

Swift中的完整工作示例,它回答了本文的最初问题(在使用iOS 8.2的iPhone 5c上测试):

        import UIKit
        class ViewController: UIViewController, UIImagePickerControllerDelegate, UINavigationControllerDelegate, UIActionSheetDelegate {
         @IBOutlet var myUIImageView: UIImageView!
         var myUIImagePickerController: UIImagePickerController!
         override func viewDidLoad() {
             super.viewDidLoad()
         }
         override func viewWillAppear(animated: Bool) {
             println("viewWillAppear(animated: Bool) method called.")
             super.viewWillAppear(animated)
             NSNotificationCenter.defaultCenter().removeObserver(self)
         }
         override func viewWillDisappear(animated: Bool) {
             println("viewWillDisappear(animated: Bool) method called.")
             super.viewWillDisappear(animated)
             NSNotificationCenter.defaultCenter().addObserver(self, selector: "cameraChanged:", name: "AVCaptureDeviceDidStartRunningNotification", object: nil)
         }
         /* UIImagePickerControllerDelegate Section */
         func imagePickerController(picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [NSObject : AnyObject]) {
              if(self.myUIImagePickerController.sourceType == UIImagePickerControllerSourceType.Camera) {
                 self.myUIImageView.image = info[UIImagePickerControllerEditedImage] as? UIImage
              } else {
                 self.myUIImageView.image = info[UIImagePickerControllerOriginalImage] as? UIImage
              }
              self.dismissViewControllerAnimated(true, completion: nil)
         }
        func imagePickerControllerDidCancel(picker: UIImagePickerController) {
            self.dismissViewControllerAnimated(true, completion: nil)
        }
        /*
        You can choose to use one of the UIResponder methods:
        touchesBegan, touchesMoved, touchesEnded etc, in order to detect the touch
        on the UIImageView.
        */
        override func touchesEnded(touches: NSSet, withEvent event: UIEvent) {
            let touch: UITouch? = touches.anyObject() as? UITouch
            if (touch?.view == myUIImageView) {
                println("myUIImageView has been tapped by the user.")
                self.takingAPictureUsingTheCamera()
            }
        }
        func takingAPictureUsingTheCamera() {
            self.myUIImagePickerController = UIImagePickerController()
            self.myUIImagePickerController.delegate = self // Set the delegate
            self.myUIImagePickerController.sourceType = UIImagePickerControllerSourceType.Camera
            self.myUIImagePickerController.cameraDevice = UIImagePickerControllerCameraDevice.Front
    //        self.myUIImagePickerController.editing = true
            self.myUIImagePickerController.allowsEditing = true
            self.presentViewController(self.myUIImagePickerController, animated: true, completion: nil)
        }
        func cameraChanged(notification: NSNotification) {
             println("cameraChanged(notification: NSNotification) method called.")
             self.myUIImagePickerController.cameraViewTransform = CGAffineTransformIdentity
             if(self.myUIImagePickerController.cameraDevice == UIImagePickerControllerCameraDevice.Front){
                 self.myUIImagePickerController.cameraViewTransform = CGAffineTransformScale(self.myUIImagePickerController.cameraViewTransform, -1, 1)
             }
        }
       }// End class

最新更新