UIImagePickerController в UIPopOverController не открывается в iOS 5 - PullRequest
0 голосов
/ 22 ноября 2011

в моем приложении для 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];

Ответы [ 2 ]

0 голосов
/ 03 января 2012

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

0 голосов
/ 22 ноября 2011

В моем коде у меня был 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];
      }

}

Счастливое кодирование.

...