#objective-c #cocoa-touch #ios #uiimagepickercontroller
#objective-c #cocoa-touch #iOS #uiimagepickercontroller
Вопрос:
Чтобы создать свою пользовательскую панель инструментов в моем UIImagePickerControllerSourceTypeCamera
, я должен отключить управление камерой следующим образом:
pickerOne.showsCameraControls = YES;
Я хочу показать масштабирование, вспышку, переключение камер и фокусировку на UIImagePickerController
, но я хочу создать свой пользовательский вид. При добавлении моего пользовательского представления оно отображается, только если я выключу cameraControls
.
Есть ли какой-нибудь способ не скрывать элементы управления камерой и создать мой пользовательский вид? Или мне придется вручную добавлять эти кнопки?
Ответ №1:
Я считаю, что нет другого способа (по крайней мере, прямым способом), кроме как реализовать встроенную функциональность в вашем пользовательском представлении (наложение).
Другой подход (который я не пробовал) заключается в добавлении пользовательского представления (не использовать свойство cameraOverlay) к корневому просмотру UIImagePickerController. Это не рекомендуется / разрешено, но, похоже, это сработает. Причина, по которой автоматическая вспышка / масштабирование / фронтальная камера … не работают с пользовательским видом, заключается в том, что иерархия видов отличается.
Если вы посмотрите на популярные приложения для камеры, большинство из них реализуют эти элементы управления. Кроме того, я сделал то же самое.
На самом деле реализовать их не должно быть сложно. «Коснитесь, чтобы сфокусироваться» сложно реализовать, фактический фокус выполняется по умолчанию. Все, что нам нужно сделать, это нарисовать квадрат вокруг касания.
Ответ №2:
Вы можете игнорировать касания в вашем overlayview, проверив принимающий вид методом 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.