拍摄后相机未显示保存/取消按钮?

时间:2017-02-13 12:35:01

标签: ios objective-c camera uiimage uiimagepickercontroller

我正在使用UIImagePickerController在我的应用程序中打开相机,它也没有显示保存和取消按钮以及捕获按钮。

为了实现这一点,我使用的是objective-c。

- (void)viewDidLoad {
    [super viewDidLoad];

    pickernew = [[UIImagePickerController alloc] init];
    pickernew.sourceType = UIImagePickerControllerSourceTypeCamera;
    pickernew.delegate = self;
    pickernew.allowsEditing = YES;
    [self.view addSubview:pickernew.view];
    deviceOrientationCameraLoad=[UIApplication sharedApplication].statusBarOrientation;
    //nidhi
    [pickernew setShowsCameraControls:YES];

}

-(void)cameraRotetion
{

    if(IS_OS_8_OR_LATER) {
    switch (deviceOrientationCameraLoad) {
        case UIInterfaceOrientationLandscapeLeft:
            [self dipslandscapLeft];

            break;

        case UIInterfaceOrientationLandscapeRight:

            [self dipslandscapRight];

            break;

        case UIInterfaceOrientationPortraitUpsideDown:

            [self dipsPortaitdown];

            break;

        case UIInterfaceOrientationPortrait:
             [self dipsPortait];
            break;
         case UIInterfaceOrientationUnknown:
         [self dipsPortait];
            break;
        default:
            break;

     }

  }
-(void)dipsPortait
{
    CGFloat scaleFactor=1.3f;
   UIInterfaceOrientation deviceOrientationCamera = [UIApplication sharedApplication].statusBarOrientation;
    NSLog(@"before %ld",(long)deviceOrientationCamera);
    //    switch ([UIApplication sharedApplication].statusBarOrientation) {
    switch (deviceOrientationCamera) {
        case UIInterfaceOrientationLandscapeLeft:
            pickernew.cameraViewTransform = CGAffineTransformScale(CGAffineTransformMakeRotation(M_PI * 90 / 180.0), scaleFactor, scaleFactor);

            break;

        case UIInterfaceOrientationLandscapeRight:

            pickernew.cameraViewTransform = CGAffineTransformScale(CGAffineTransformMakeRotation(M_PI * -90 / 180.0), scaleFactor, scaleFactor);

            break;

        case UIInterfaceOrientationPortraitUpsideDown:
            pickernew.cameraViewTransform = CGAffineTransformScale(CGAffineTransformMakeRotation(M_PI * -180 / 180.0), scaleFactor, scaleFactor);

            break;

        case UIInterfaceOrientationPortrait:
            pickernew.cameraViewTransform = CGAffineTransformScale(CGAffineTransformMakeRotation(0), scaleFactor, scaleFactor);
            break;

        case UIInterfaceOrientationUnknown:
            pickernew.cameraViewTransform = CGAffineTransformScale(CGAffineTransformMakeRotation(0), scaleFactor, scaleFactor);
            break;

        default:
            break;
    }


}
-(void)dipsPortaitdown
{
    CGFloat scaleFactor=1.3f;
   UIInterfaceOrientation deviceOrientationCamera = [UIApplication sharedApplication].statusBarOrientation;
    NSLog(@"before %ld",(long)deviceOrientationCamera);
    //    switch ([UIApplication sharedApplication].statusBarOrientation) {
    switch (deviceOrientationCamera) {
        case UIInterfaceOrientationLandscapeLeft:
            pickernew.cameraViewTransform = CGAffineTransformScale(CGAffineTransformMakeRotation(M_PI * -90 / 180.0), scaleFactor, scaleFactor);

            break;

        case UIInterfaceOrientationLandscapeRight:
            pickernew.cameraViewTransform = CGAffineTransformScale(CGAffineTransformMakeRotation(M_PI * 90 / 180.0), scaleFactor, scaleFactor);

            break;

        case UIInterfaceOrientationPortraitUpsideDown:
            pickernew.cameraViewTransform = CGAffineTransformScale(CGAffineTransformMakeRotation(0), scaleFactor, scaleFactor);

            break;

        case UIInterfaceOrientationPortrait:
            pickernew.cameraViewTransform = CGAffineTransformScale(CGAffineTransformMakeRotation(M_PI * -180 / 180.0), scaleFactor, scaleFactor);
            break;

        case UIInterfaceOrientationUnknown:
            pickernew.cameraViewTransform = CGAffineTransformScale(CGAffineTransformMakeRotation(0), scaleFactor, scaleFactor);
            break;

        default:
            break;
    }

}
-(void)dipslandscapLeft
{
    CGFloat scaleFactor=1.3f;
    UIInterfaceOrientation deviceOrientationCamera = [UIApplication sharedApplication].statusBarOrientation;
    NSLog(@"before %ld",(long)deviceOrientationCamera);
    //    switch ([UIApplication sharedApplication].statusBarOrientation) {
    switch (deviceOrientationCamera) {
        case UIInterfaceOrientationLandscapeLeft:

            pickernew.cameraViewTransform = CGAffineTransformScale(CGAffineTransformMakeRotation(0), scaleFactor, scaleFactor);

            break;

        case UIInterfaceOrientationLandscapeRight:

            pickernew.cameraViewTransform = CGAffineTransformScale(CGAffineTransformMakeRotation(M_PI * -180 / 180.0), scaleFactor, scaleFactor);

            break;

        case UIInterfaceOrientationPortraitUpsideDown:

             pickernew.cameraViewTransform = CGAffineTransformScale(CGAffineTransformMakeRotation(M_PI * 90 / 180.0), scaleFactor, scaleFactor);

            break;

        case UIInterfaceOrientationPortrait:

            pickernew.cameraViewTransform = CGAffineTransformScale(CGAffineTransformMakeRotation(M_PI * -90 / 180.0), scaleFactor, scaleFactor);

            break;

        case UIInterfaceOrientationUnknown:

            pickernew.cameraViewTransform = CGAffineTransformScale(CGAffineTransformMakeRotation(0), scaleFactor, scaleFactor);

            break;

        default:
            break;
    }

}

-(void)dipslandscapRight
{
    CGFloat scaleFactor=1.3f;
     UIInterfaceOrientation deviceOrientationCamera = [UIApplication sharedApplication].statusBarOrientation;
    NSLog(@"before %ld",(long)deviceOrientationCamera);
    //    switch ([UIApplication sharedApplication].statusBarOrientation) {
    switch (deviceOrientationCamera) {
        case UIInterfaceOrientationLandscapeLeft:
            pickernew.cameraViewTransform = CGAffineTransformScale(CGAffineTransformMakeRotation(M_PI * -180 / 180.0), scaleFactor, scaleFactor);

            break;

        case UIInterfaceOrientationLandscapeRight:
             pickernew.cameraViewTransform = CGAffineTransformScale(CGAffineTransformMakeRotation(0), scaleFactor, scaleFactor);

            break;

        case UIInterfaceOrientationPortraitUpsideDown:

            pickernew.cameraViewTransform = CGAffineTransformScale(CGAffineTransformMakeRotation(M_PI * -90 / 180.0), scaleFactor, scaleFactor);
            break;

        case UIInterfaceOrientationPortrait:

            pickernew.cameraViewTransform = CGAffineTransformScale(CGAffineTransformMakeRotation(M_PI * 90 / 180.0), scaleFactor, scaleFactor);
            break;

        case UIInterfaceOrientationUnknown:
            pickernew.cameraViewTransform = CGAffineTransformScale(CGAffineTransformMakeRotation(0), scaleFactor, scaleFactor);
            break;

        default:
            break;
    }

}

-(void)objectCurrent1:(UIPopoverController*)pop currentTag:(int)tagCurr lineId:(NSString *)lineId headerId:(NSString *)headerId userDbId:(int)userDBId{
    popup = pop;
    tagC = tagCurr;
    header_Id = headerId;
    line_Id = lineId;
    User_Db_Id = userDBId;
}
- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}
- (void)viewWillAppear:(BOOL)animated
{
        if (IS_OS_8_OR_LATER)
        {
            if([[UIDevice currentDevice]orientation] == UIDeviceOrientationFaceUp)
            {
                if([UIApplication sharedApplication].statusBarOrientation == UIInterfaceOrientationLandscapeLeft)
                {
                    [[UIDevice currentDevice]setValue:[NSNumber numberWithInteger:UIDeviceOrientationLandscapeRight] forKey:@"orientation"];
                }
                else
                {
                    [[UIDevice currentDevice]setValue:[NSNumber numberWithInteger:UIDeviceOrientationLandscapeLeft] forKey:@"orientation"];
                }
            }
        }

        deviceOrientation = [[UIApplication sharedApplication] statusBarOrientation];

        if(deviceOrientation == UIInterfaceOrientationPortrait || deviceOrientation == UIInterfaceOrientationPortraitUpsideDown) {
            [self portraitView];
        }

        if(deviceOrientation == UIInterfaceOrientationLandscapeRight || deviceOrientation == UIInterfaceOrientationLandscapeLeft) {
            [self landscapeView];
        }
    //[self cameraRotetion];
    [super viewWillAppear:animated];
}

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingImage:(UIImage *)image editingInfo:(NSDictionary *)editingInfo
{

}
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info {

    UIImage *imgTaken;
    NSString *docsDir,*imgNewPath;
    NSData *imgData;
    docsDir = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask, YES) objectAtIndex:0];

    imgTaken = info[UIImagePickerControllerOriginalImage];
    imgNewPath = [NSTemporaryDirectory() stringByAppendingPathComponent:[NSString stringWithFormat:@"image%@%@%d.png",line_Id,header_Id,User_Db_Id]];
    UIImage *image1 = [self resizeImage:imgTaken];
    //imgData = UIImageJPEGRepresentation(imgTaken, 0.25);
    imgData = UIImagePNGRepresentation(image1);
    [imgData writeToFile:imgNewPath atomically:YES];
    [popup dismissPopoverAnimated:YES];
    pickernew = nil;
}

-(UIImage *)resizeImage :(UIImage *)theImage {
    CGSize theNewSize = {400, 400}; ///{width, height}
    UIGraphicsBeginImageContextWithOptions(theNewSize, NO, 1.0);
    [theImage drawInRect:CGRectMake(0, 0, theNewSize.width, theNewSize.height)];
    UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    return newImage;
}
- (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker {

//    [picker dismissViewControllerAnimated:YES completion:nil];
//    [pickernew dismissViewControllerAnimated:YES completion:nil];
//    [picker removeFromParentViewController];
//    [pickernew removeFromParentViewController];
    [popup dismissPopoverAnimated:YES];
    //[pickernew removeFromSubView];
    pickernew = nil;

}
- (void)cancelButtonPressed:(id)sender {
   // [self.captureSession stopRunning]; //stop the capture session
    [self.presentingViewController dismissViewControllerAnimated:YES completion:nil]; // dismiss the current view controller
}



- (void)viewDidAppear:(BOOL)animated
{
    [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(onOrientationChange:) name:UIDeviceOrientationDidChangeNotification object:nil];

    [[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications];
    [super viewDidAppear:animated];
}

- (void)viewWillDisappear:(BOOL)animated
{
    [[NSNotificationCenter defaultCenter] removeObserver:self name:UIDeviceOrientationDidChangeNotification object:nil];
    [super viewWillDisappear:animated];
}


-(void)portraitView{
    if (pickernew) {
         [self cameraRotetion];
    }


}

-(void)landscapeView{
    if (pickernew) {
        [self cameraRotetion];
    }
}

1 个答案:

答案 0 :(得分:0)

保存/取消按钮是allowsEditing的一部分,它只出现在捕获后。另外,你不应该使用self.view addSubview, 而是:

[self presentViewController:pickerView animated:YES completion:nil]