Изменение размера UIImagePicker, представленного через UIPopOver (iPad) - PullRequest
4 голосов
/ 07 декабря 2011

Я пытаюсь изменить размер UIImagePicker, который я представляю через UIPopOver.Код показан ниже.Проблема в том, что размер PopOver не отображается должным образом - он на короткое время вспыхивает в правильном размере, а затем оживляет до обычного размера по умолчанию.поповер?

- (void)showImagePickerForPhotoLibrary {
    NSLog(@"Picker");
    imagePickerController = [[UIImagePickerController alloc] init];
    imagePickerController.delegate = self;
    imagePickerController.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
    imagePickerController.contentSizeForViewInPopover = CGSizeMake(768, 1000);

    if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
        Class cls = NSClassFromString(@"UIPopoverController");
        if (cls != nil) {
            popoverController = [[UIPopoverController alloc] initWithContentViewController:imagePickerController];
            //popoverController.popoverContentSize = CGSizeMake(768, 1000);
            [popoverController presentPopoverFromRect:selectedRect inView:self.view permittedArrowDirections:4 animated:YES];
        }
    }
    else {
        [app.mainViewController presentModalViewController:imagePickerController animated:YES];
    }   
}

Ответы [ 2 ]

10 голосов
/ 07 декабря 2011

Я не уверен, что это самое элегантное решение, однако мне кажется, что оно работает нормально:

Вы можете встроить представление UIImagePickerController в представление "контейнера" ​​UIViewController.

- (void)showImagePickerForPhotoLibrary {
NSLog(@"Picker");
    imagePickerController = [[UIImagePickerController alloc] init];
    imagePickerController.delegate = self;
    imagePickerController.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;

    UIViewController *containerController = [[UIViewController alloc] init];
    containerController.contentSizeForViewInPopover = CGSizeMake(768, 1000);

    [containerController.view addSubview:imagePickerController.view];

    if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
        Class cls = NSClassFromString(@"UIPopoverController");
        if (cls != nil) {
            popoverController = [[UIPopoverController alloc] initWithContentViewController:containerController];

            [popoverController presentPopoverFromRect:selectedRect inView:self.view permittedArrowDirections:4 animated:YES];


            [imagePickerController.view setFrame:containerController.view.frame];
        }
    }
    else {
        [app.mainViewController presentModalViewController:containerController animated:YES];
    }   
}

Надеюсь, это поможет

РЕДАКТИРОВАТЬ: по какой-то странной причине рамка действительно меняется, когда в горизонтальной плоскости вправо.

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

Я отредактировал код выше, чтобы показать это.

Также, в вашем контроллере, добавьте это:

- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation {

    [imagePickerController.view setFrame:imagePickerController.view.superview.frame];
}
0 голосов
/ 17 марта 2014

Когда я попробовал решение Mutix, поповер показывал только панель навигации с пустым белым видом.

Мой способ обойти это - добавить imagePickerController как дочерний элемент containerController, а не просто добавить представление средства выбора.

В основном это означает заменить эту строку:

[containerController.view addSubview:imagePickerController.view];

с этими строками:

[containerController addChildViewController:imagePickerController];
[containerController.view addSubview:imagePickerController.view];
[imagePickerController didMoveToParentViewController:containerController];

Кроме того, при использовании этого подхода мне не требовалась особая обработка для ландшафтного режима.

...