2013-07-10 2 views
1

Я играю с камерой и просматриваю странное поведение. Перед представлением UIImagePickerController, я устанавливаю allowEditing в YES. После появления экрана захвата, я нажимаю кнопку, которая запускает takePicture(). Вместо представления экрана редактирования сразу вызывается метод делегата didFinishPickingMediaWithInfo(). Может ли кто-нибудь помочь мне выяснить, что я могу делать неправильно? Я вставил часть своего кода ниже ...UIImagePickerController не отображает экран редактирования

Спасибо!

- (BOOL)shouldStartCameraController { 

    if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera] == NO) { 
     return NO; 
    } 

    CGSize screenSize = [[UIScreen mainScreen] bounds].size; 
    float overlayOffset = 0; 

    if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone) { 
     if (screenSize.height > 480.0f) { 
      overlayOffset = 195; 
     } else { 
      overlayOffset = 103; 
     } 
    } else { 
     /*Do iPad stuff here.*/ 
    } 


    UIImagePickerController *cameraUI = [[UIImagePickerController alloc] init]; 
    if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera] 
     && [[UIImagePickerController availableMediaTypesForSourceType: 
      UIImagePickerControllerSourceTypeCamera] containsObject:(NSString *)kUTTypeImage]) { 

     cameraUI.mediaTypes = [NSArray arrayWithObject:(NSString *) kUTTypeImage]; 
     cameraUI.sourceType = UIImagePickerControllerSourceTypeCamera; 

     if ([UIImagePickerController isCameraDeviceAvailable:UIImagePickerControllerCameraDeviceRear]) { 
      cameraUI.cameraDevice = UIImagePickerControllerCameraDeviceRear; 
     } else if ([UIImagePickerController isCameraDeviceAvailable:UIImagePickerControllerCameraDeviceFront]) { 
      cameraUI.cameraDevice = UIImagePickerControllerCameraDeviceFront; 
     } 

    } else { 
     return NO; 
    } 


    UIView *cameraOverlayView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, cameraUI.view.frame.size.width, cameraUI.view.frame.size.height)]; 
    UIImageView *cameraOverlayImageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"iphone5_camera_overlay.png"]]; 
    cameraOverlayImageView.frame = CGRectMake(0, 0, cameraUI.view.frame.size.width, cameraUI.view.frame.size.height); 
    [cameraOverlayView addSubview:cameraOverlayImageView]; 


    UILabel *cameraLabel = [[UILabel alloc] initWithFrame:CGRectMake(0.0f, self.view.bounds.size.height-overlayOffset, self.view.bounds.size.width, 50.0f)]; 
    [cameraLabel setTextAlignment:NSTextAlignmentCenter]; 
    [cameraLabel setBackgroundColor:[UIColor clearColor]]; 
    [cameraLabel setTextColor:[UIColor whiteColor]]; 
    [cameraLabel setShadowColor:[UIColor colorWithWhite:0.0f alpha:0.300f]]; 
    [cameraLabel setShadowOffset:CGSizeMake(0.0f, -1.0f)]; 
    [cameraLabel setFont:[UIFont boldSystemFontOfSize:18.0f]]; 
    [cameraOverlayView addSubview:cameraLabel]; 

    UIButton *cancelButton = [UIButton buttonWithType:UIButtonTypeCustom]; 
    [cancelButton addTarget:self action:@selector(cancelButtonPressed:) forControlEvents:UIControlEventTouchDown]; 
    [cancelButton setFrame:CGRectMake(10, cameraOverlayView.frame.size.height-60, 50, 50)]; 
    [cancelButton setBackgroundColor:[[UIColor whiteColor] colorWithAlphaComponent:0.5f]]; 
    [cameraOverlayView addSubview:cancelButton]; 


    UIButton *snapButton = [UIButton buttonWithType:UIButtonTypeCustom]; 
    [snapButton addTarget:self action:@selector(takePictureButtonPressed:) forControlEvents:UIControlEventTouchDown]; 
    [snapButton setFrame:CGRectMake(110, cameraOverlayView.frame.size.height-60, 100, 50)]; 
    [snapButton setBackgroundColor:[[UIColor whiteColor] colorWithAlphaComponent:0.5f]]; 
    [cameraOverlayView addSubview:snapButton]; 
    cameraUI.allowsEditing = YES; 
    cameraUI.showsCameraControls = NO; 
    cameraUI.delegate = self; 
    self.imagePickerController = cameraUI; 

    [self presentModalViewController:cameraUI animated:YES]; 

    return YES; 
} 


- (void)handleGesture:(UIGestureRecognizer *)gestureRecognizer { 
    [self shouldPresentPhotoCaptureController]; 
} 

#pragma mark - UIBarButton Selectors 

- (void)takePictureButtonPressed:(id)sender { 
    NSLog(@"takePictureButtonPressed..."); 
    // TODO: take picture! 
    [self.imagePickerController takePicture]; 

} 

ответ

0

Возможные продублируйте: How do I use [camera takePhoto] and edit using UIImagePicker - UIImagePickerController.allowsEditing = YES

Согласно takePicture: метод компании Apple документации:

Используйте этот метод в сочетании с точки зрения пользовательского наложения, чтобы инициировать программный захват неподвижного изображения. Это поддерживает выбор нескольких изображений, не выходя из интерфейса, , но требует, чтобы вы скрывали элементы управления выбором изображений по умолчанию.

Вызов этого метода во время захвата изображения не влияет. Вы должны подождать, пока связанный объект-делегат не получит сообщение imagePickerController: didFinishPickingMediaWithInfo: прежде чем вы сможете захватить другое изображение.

Похоже, что этот подход (настраиваемый оверлей) сконфигурирован для управления самостоятельно. Даже если «allowEditing = YES» сделанное изображение будет отправлено непосредственно на imagePickerController: didFinishPickingMediaWithInfo :.

Исходя из этого, если мы хотим отредактировать взятое изображение с помощью нашего пользовательского интерфейса, для этой цели мы должны создать соответствующий пользовательский экран редактирования.

+0

Возможный дубликат перенаправляется на другой возможный дубликат. – MendyK

Смежные вопросы