Скрыть панель инструментов UIImagePickerControllerSourceTypceCamera, но отдельные кнопки? - PullRequest
2 голосов
/ 05 июня 2011

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

pickerOne.showsCameraControls = YES;

Я хочу показать зум, вспышку, переключить камеры и сфокусироваться на UIImagePickerController, но я хочу создать свой собственный вид. При добавлении моего пользовательского представления оно отображается только при отключении cameraControls.

Можно ли как-то не скрыть элементы управления камерой и сделать свой собственный вид? Или мне придется добавить эти кнопки вручную?

Ответы [ 2 ]

2 голосов
/ 06 июня 2011

Я полагаю, что нет другого способа (по крайней мере, прямым способом), кроме как реализовать встроенную функциональность в вашем пользовательском представлении (оверлей).
Другой подход (который я не пробовал) - добавить пользовательское представление (неиспользовать свойство cameraOverlay) для корневого представления UIImagePickerController.Это не предлагается / не разрешено, но похоже, что это будет работать.Причина, по которой autoflash / zoom / front camera ... не работает с пользовательским видом, состоит в том, что иерархия представления отличается.

Если вы посмотрите на популярные приложения камеры, большинство из них реализуют эти элементы управления.Кроме того, я сделал то же самое.
На самом деле их не должно быть сложно реализовать.«Нажмите, чтобы сфокусироваться» сложно реализовать, фактическая фокусировка выполняется по умолчанию.Все, что нам нужно сделать, это нарисовать квадрат вокруг прикосновения.

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

Вы можете игнорировать прикосновения к вашему оверлейному просмотру, проверив полученное представление в методе hittest.Просто добавьте этот код в ваше представление наложения, тогда все касания в этом представлении будут игнорироваться, но не те, что касаются его подпредставлений.

-(id)hitTest:(CGPoint)point withEvent:(UIEvent *)event
{
    id hitView = [super hitTest:point withEvent:event];
    if (hitView == self) return nil;
    else return hitView;
}

Если прочитать это сегодня на stackoverflow, но я не помню, гдеsry.

...