UIImagePickerController в UIPopOverController не открывается в iOS 5

в моем приложении для iPad я открываю библиотеку фотографий во всплывающем контроллере. Он отлично работал в iOS 4, но теперь не открывается в iOS 5. Я использую следующий код для открытия библиотеки фотографий,

UIImagePickerController* picker = [[UIImagePickerController alloc] init]; 
    picker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
    picker.delegate = self;
    picker.mediaTypes = [UIImagePickerController availableMediaTypesForSourceType:UIImagePickerControllerSourceTypePhotoLibrary];

    popOver = [[UIPopoverController alloc] initWithContentViewController:picker]; 
    popOver.delegate = self;

    int w = 320;

    CGRect pickerFrame = CGRectMake(0, 0, w, bImportPicker.frame.origin.y);
    [popOver setPopoverContentSize:pickerFrame.size animated:NO];   
    [popOver presentPopoverFromRect:pickerFrame inView:self.view permittedArrowDirections:UIPopoverArrowDirectionDown animated:YES];
    [picker release];

person Mobile Developer iOS Android    schedule 22.11.2011    source источник


Ответы (2)


В моем коде у меня был UIImageView, и всякий раз, когда я нажимал на него, в PopOverController открывался PickerView с изображениями из библиотеки iPhone.

  UITapGestureRecognizer *singleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleSingleTap:)];

   [myImageView addGestureRecognizer:singleTap];   // added action for SingleTap




  - (void)handleSingleTap:(UIGestureRecognizer *)gestureRecognizer {  
// single tap does nothing for now  

    if ([UIImagePickerController isSourceTypeAvailable: 
                UIImagePickerControllerSourceTypePhotoLibrary]) 
     { 
          UIImagePickerController  *imagePickerController = 
                     [[UIImagePickerController alloc] init];
          imagePickerController.delegate = self;
          imagePickerController.sourceType =
                     UIImagePickerControllerSourceTypePhotoLibrary;

          UIPopoverController  *popVC = [[UIPopoverController alloc] 
                                 initWithContentViewController: imagePickerController];
          popVC.delegate = self; 
         [popVC setPopoverContentSize:CGSizeMake(500, 500)];


         UIView *tempView = gestureRecognizer.view;        
         CGPoint point = CGPointMake(tempView.frame.size.width/2,
                               tempView.frame.size.height/2);
         CGSize size = CGSizeMake(100, 100);
         [popVC presentPopoverFromRect:
                           CGRectMake(point.x, point.y, size.width, size.height) 
                           inView:self.view 
                           permittedArrowDirections:UIPopoverArrowDirectionAny 
                           animated:YES];

       }
     else 
     {
         UIAlertView *alert = [[UIAlertView alloc] 
                             initWithTitle:@"Error accessing photo library"
                             message:@"Device does not support a photo library" 
                             delegate:nil cancelButtonTitle:@"Cancel" 
                             otherButtonTitles:nil]; 
         [alert show]; 
         [alert release];
      }

}

Удачного кодирования.

person Surjit Joshi    schedule 22.11.2011
comment
ПРИМЕЧАНИЕ. И если вы тестируете это на симуляторе, в библиотеке симулятора должны быть изображения. - person Surjit Joshi; 22.11.2011

Когда мои бедные клиенты перешли на iOS 5, их UIPopoverController отрисовывался за край экрана. Это связано с тем, что iOS 5 отличается от iOS 4 интерпретацией первого параметра presentPopoverFromRect. Когда я убедился, что предоставленный прямоугольник оставляет достаточно места для вашего UIImagePickerController между прямоугольником и краем дисплея, проблема была решена. Использование всего дисплея для прямоугольника приведет к такому неправильному поведению, которое напоминает то, что вы описали.

person Marc W. Abel    schedule 02.01.2012