#ios #mobile #titanium #appcelerator
#iOS #Мобильный #titanium #ускоритель приложений
Вопрос:
Я пытаюсь добавить дополнительные элементы интерфейса к дисплею showCamera в моем приложении для iOS.
Я знаю, что могу добавить наложение с помощью приведенного ниже кода. Проблема: это наложение всегда будет иметь размер всего экрана. Это проблема, поскольку элементы управления камерой по умолчанию (вспышка, HDR, переключатель камеры) больше недоступны.
Настройка touchEnabled: false
в createView()
позволяет пропускать все события. Это заставляет работать исходные элементы управления за счет того, что мои новые элементы вообще недоступны.
Итак, моя идея заключалась в том, чтобы уменьшить вид, чтобы он не загораживал исходные элементы вверху. Мои собственные элементы управления будут расположены посередине / справа, поэтому конфликта не возникнет. Однако, такой удачи нет.
Установка height
/ width
атрибутов в createView
ничего не дает. Последующая настройка этих свойств (напрямую или через animate()
) не имеет никакого эффекта.
Мой упрощенный код:
var myOverlay = Titanium.UI.createView({
backgroundColor: '#0F0', // just to see what is happening
height: 200 // does not work
// touchEnabled: false
// touchEnabled apparently can't be re-enabled for objects contained within this view.
});
var mySlider = Titanium.UI.createSlider({
[...]
});
myOverlay.add(mySlider);
Titanium.Media.showCamera({
overlay: myOverlay,
[...]
});
myOverlay.height = 200; // does not work
myOverlay.animate({height: 200}); // does not work
Все эти методы для управления высотой действительно работают, когда я добавляю такое же наложение в окно или другое наложение. Не так, когда я использую showCamera()
.
Вопрос: Как мне контролировать размер myOverlay
или как мне иным образом сделать стандартные элементы управления доступными, одновременно позволяя мне добавлять мои собственные элементы управления?
Ответ №1:
Если вам myOverlay
на самом деле не нужно закрывать эти элементы управления, вы могли бы попробовать установить opactity
значение ниже 1
и сохранить touchEnabled
установленное на false
значение для прохождения событий. Я предполагаю, что таким образом пользователь все еще мог видеть элементы управления через myOverlay
. Также вы пробовали возиться с позиционированием: top, right, bottom, left
?
Это может быть ужасным решением, но если первый вид имеет полный размер, вы также можете попробовать установить opacity
значение 0
, а затем добавить другой вид внутри первого вида с вашим правильным размером и ползунком в нем?
Комментарии:
1. Непрозрачность на это никак не влияет. Даже если вид невидим, это мешает мне получить доступ к элементам управления за ним.
2. Боюсь, добавление другого вида внутрь тоже не поможет. Если я установлю родительский элемент равным
touchEnabled:false
, то это также относится ко всем дочерним элементам, и я не знаю способа изменить это.3. Я знаю, что дочерние элементы получают
touchEnabled
свойство от родительского элемента, но вы можете переопределить его для каждого дочернего элемента. Однако после более тщательного изучения KitchenSink кажется, что предоставляемое ими наложение камеры действительно покрывает элементы управления камерой по умолчанию.4. Если я не делаю что-то неправильно, вы не можете изменить touchEnabled для дочерних элементов. Просто попытался добавить другой вид на наложение, чтобы поместить в него мои элементы управления, но безуспешно. Изменение
top
etc также не имело никакого эффекта, кстати. Похоже, что размер / положение наложения полностью исправлено, когда дело доходит доshowCamera
. Однако спасибо за ваши идеи!5. Эй, _Lasar, я не уверен, будет ли это работать с камерой, но в новейших примерах KS github.com/appcelerator/titanium_mobile/blob/master/demos/… они встраивают свои собственные кнопки камеры по умолчанию, которые вам нужны, прямо в оверлей. Надеюсь, это действительно устраняет проблему.