2013-10-11 2 views
0

У меня есть приложение, которое принимает изображение из существующей библиотеки или новое с камеры.UIPopover, появляющийся с неправильной кнопкой

На iPad, когда я нажимаю кнопку «из библиотеки», над кнопкой, с которой она была нажата, появляется надпись (справа), но когда я нажимаю «снимать фотографию» с кнопки камеры, появляется контроллер камеры над кнопкой «из библиотеки» также ... Мне нужно, чтобы это появилось над кнопкой «взять фотографию», иначе это выглядит немного странно!

здесь используется код;

- (void)pickImageFromLibrary: (id)sender 
{ 
    [Flurry logEvent: @"PickImage"]; 

    [self openImagePickerWithSourceType: UIImagePickerControllerSourceTypePhotoLibrary]; 

} 


- (void)takePicture: (id)sender 
{ 
    [Flurry logEvent: @"TakeImage"]; 

    [self openImagePickerWithSourceType: UIImagePickerControllerSourceTypeCamera]; 

} 

- (void)openImagePickerWithSourceType: (UIImagePickerControllerSourceType)sourceType 
{ 
    if (![UIImagePickerController isSourceTypeAvailable: sourceType]) { 
     UIAlertView *alert = [[UIAlertView alloc] initWithTitle: NSLocalizedString(@"Error", @"") 
                 message: NSLocalizedString(@"We are sorry, but this functionality is not available at your device.", @"No camera eror") 
                 delegate: nil 
               cancelButtonTitle: NSLocalizedString(@"Dismiss", @"") 
               otherButtonTitles: nil]; 
     [alert show]; 
     return; 
    } 
    UIImagePickerController *picker = [[UIImagePickerController alloc] init]; 
    picker.delegate = self; 
    picker.sourceType = sourceType; 
    self.isCameraShown = YES; 


    if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) { 
     self.popover = [[UIPopoverController alloc] initWithContentViewController:(UIViewController *)picker]; 
     CGRect takePhotoRect; 
     takePhotoRect.origin = self.view.frame.origin; 
     takePhotoRect.size.width = 1; 
     takePhotoRect.size.height = 1; 
     [self.popover setPopoverContentSize:CGSizeMake(320.0, 216.0)]; 

     [self.popover presentPopoverFromRect:_openLibraryButton.frame inView:self.view permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES]; 

    }else{ 
     [self presentViewController:picker animated:YES completion:NULL ]; 
    } 


} 
+0

Похоже, что вы вынуждаете его всегда использовать '' fromLibrary' кадр [self.popover presentPopoverFromRect: _openLibraryButton.frame INview: self.view permittedArrowDirections: UIPopoverArrowDirectionAny анимированный: YES] ; ' – Bot

+0

Боковое примечание - не показывайте камеру в popover. Используйте только popover для библиотеки фотографий. – rmaddy

ответ

0

Вы представляете постер из openLibraryButton.

[self.popover presentPopoverFromRect:_openLibraryButton.frame inView:self.view permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES]; 

Вам нужно добавить проверку, чтобы увидеть, если кнопка take photo или choose from library была нажата, а затем показать поповер для этой кнопки.

SUDO Код:

if (sourceType == UIImagePickerControllerSourceTypePhotoLibrary) { 
    [self.popover presentPopoverFromRect:_openLibraryButton.frame inView:self.view permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES]; 
} else { 
    [self.popover presentPopoverFromRect:_takeFromCamera.frame inView:self.view permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES]; 
} 
+0

Привет, как я могу добавить контрольную часть? У вас есть пример, который я мог бы использовать? –

+0

@DaveBradford вы можете проверить sourceType, который вы передаете в – Bot

+0

Bot - работает безупречно, большое вам спасибо! Отмечено, как принято! –

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