UIImagePickerController представлен изнутри - PullRequest
2 голосов
/ 30 апреля 2010

Возможно ли представить UIImagePickerController внутри представления вместо его модального использования или внутри всплывающего окна?

Я пробовал это без успеха ...

if ([UIImagePickerController isSourceTypeAvailable:
     UIImagePickerControllerSourceTypePhotoLibrary]) {

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

    [picker.view setFrame:CGRectMake(0,0, 400, 400)]; // just for testing
    [picker.view setCenter:CGPointMake(200,200)];

    [myView addSubview:picker.view];
    [picker.view release];

}

спасибо за любую помощь

Ответы [ 3 ]

1 голос
/ 31 мая 2013

Можно ли это сделать на законных основаниях?

Да.

Вы можете использовать Image Picker за пределами поповерного / модального вида, это само по себе не является незаконным, оно просто не поддерживается. Поэтому оно хрупкое. У вас не будет проблем с Apple при отправке приложения, но вам нужно будет уделять особое внимание при выходе новой версии iOS, потому что она может сломаться (потому что не поддерживается использование средства выбора изображений в по-другому).

Я связался со службой технической поддержки Apple по этому поводу, так как мне также нужно реализовать что-то похожее на поповер iPad Pages.app с сегментированным управлением. Использование средства выбора изображений в качестве одного из сегментированных элементов управления для просмотра содержимого.

Я все настроил и работал, но не мог скрыть кнопку «Отмена» в средстве выбора изображений. Инженер Apple сказал мне, что это не поддерживаемое решение, а также сказал, что Apple «в прошлом использовала частные API для достижения определенных результатов». Я не думаю, что это огромный сюрприз. Но я уверен, что сегодня они хотя бы ограничивают себя, по крайней мере, тем, что их приложения, публикуемые в App Store, используют только общедоступные API.

Обход

Пожалуйста, ознакомьтесь с моим git-репозиторием на BitBucket, я получил это, используя сдерживание контроллера представления (доступно с iOS 5).

https://bitbucket.org/danielphillips/image-picker-demo

Также имеется возможность взломать кнопку отмены. Он использует недокументированное свойство, но я не уверен, что вы могли бы назвать его частным API, я никогда прежде не пытался взломать частные API Cocoa Touch, и я никогда не беспокоился об этом, поэтому я не мог скажем, если это легкий взлом или если у Apple есть программное обеспечение для обнаружения, я использовал частный API.

Так что я не знаю, попадет ли часть кнопки «Отмена» в App Store или нет, но, возможно, стоит попробовать.

0 голосов
/ 03 августа 2010

Примечание. Существует небольшое исключение из правила «постукивание за пределами попсового сервера», которое вызвало проблему в одном из моих приложений. Если у вас есть панель инструментов, нажатие на панель инструментов (которая технически находится за пределами popover =) не отменяет popover. Если вы не пишете код для этого случая, можно создать сразу два всплывающих окна, что приведет к отклонению вашего приложения ...

0 голосов
/ 30 апреля 2010

Я сильно сомневаюсь, что это возможно без выхода за пределы API.

Основная функция представления средства выбора - обеспечить безопасный доступ к общесистемному ресурсу. Другими словами, у него есть функция привратника, которую Apple не хочет, чтобы какое-либо приложение могло переопределить. По крайней мере, чтобы обеспечить соблюдение ограничений на доступ к фотобиблиотеке, она должна быть модальной.

Это может ослабнуть в 4.0, но я в этом немного сомневаюсь.

...