![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
Регистрация: Sep 2010
Сообщений: 5
|
Доброго времени суток,
В приложении реализован следующий алгоритм: 1. Создается sprite1 фиксированного размера. 2. sprite1 помещается на box (из библиотеки визуальных компонентов ВК, но это к делу не относится, принимаем его за sprite0). 3. На sprite1 создается фиксированного размера sprite2. 4. На sprite2 в зависимости от кол-ва данных создаются textfield. По окончанию п.4 высота sprite2 становится больше высоты sprite1, поэтому высота sprite1 увеличивается. Box (sprite0) при привышении допустимых размеров данных добавляет scroll. Проблема заключается в том, что я использую sprite2.scrollRect, чтобы делать прокрутку непосредственно спрайта с данными, а родительские элементы реагируют на превышение высоты, что в итоге приводит к появлению лишнего scroll. Каким образом мне следует организовать прокрутку sprite2 так, чтобы родительские элементы не реагировали на превышение высоты? |
|
|||||
|
Регистрация: Sep 2010
Сообщений: 5
|
КорДум,
Скролл реагирует на изменение высоты sprite1, который в свою очередь реагирует на изменение высоты sprite2..n. Так как на для остальных спрайтов (3..n) необходимо, чтобы скролл работал корректно, то требуется, чтобы sprite1 игнорировал именно высоту sprite2. Поэтому, к сожалению, вариант отключения скролла или корректировки его работы будет неуместным. |
|
|||||
|
Регистрация: Sep 2010
Сообщений: 5
|
derhab,
Насколько я понимаю, в таком случае уменьшатся и размеры sprite2, а значит изменится значение масштаба и данные на sprite2 будут неправильно отображены, я прав? Да, моя задача состоит в том, чтобы sprite1 не реагировал на превышение высоты sprite2, но реагировал на превышение высоты других child. |
|
|||||
|
Регистрация: Sep 2010
Сообщений: 5
|
derhab,
Спасибо за отличную идею! К сожалению, у меня нет опыта для реализации данной идеи, поэтому я был бы очень признателен, если бы вы скинули ссылку с примером реализации класса, расширяющего стандартный класс. Последний раз редактировалось aintghost; 27.09.2010 в 23:22. |
|
|||||
|
Регистрация: Sep 2010
Сообщений: 5
|
Написал класс, который при запросе размеров спрайта будет выдавать фиксированные значения. Присвоил данный класс объекту sprite2, тем не менее, sprite1 по какой-то причине изменяет свою высоту до реальной высоты sprite2.
package { import flash.display.Sprite; public class UnresizableSprite extends Sprite { private var _width: Number; private var _height: Number; public function UnresizableSprite(width: Number, height: Number): void { _width = width; _height = height; } public override function get width(): Number { return _width; } public override function get height(): Number { return _height; } } } Добавлено через 2 часа 53 минуты У моей задачи есть 2 пути решения: I. 1) Уточнить как Sprite определяют размеры child. 2) Подделать значения размеров при помощи расширения класса Sprite. 3) Присвоить новый класс sprite2. Таким образом фактический размер sprite2 будет соответствовать данным на нем, а parent будет считать, что sprite2 меньше. II. Так как box (sprite0) реагирует на свойство height sprite1, то: 1) Уточнить как происходит изменение размеров Sprite из-за child. 2) При изменении размеров проверить, чтобы они не были вызваны sprite2. 3) Подделать значения размеров. 4) Присвоить новый класс sprite1. Таким образом фактический размер sprite1 будет соответствовать данным на нем, но: * В случае изменения размеров, вызванных sprite2 - parent (box (sprite0)) будет получать подделанное значение и не будет добавлять скролл. Данные, выходящие за ограничения размеров будут спрятаны при помощи mask или scrollRect непосредственно в sprite2. * В случае изменения размеров, вызванных не sprite2, а другими child - box получит реальные размеры и будет добавлять скролл. Второй способ уже реализован, так как уже известно, как box (sprite0) определяет размеры child, и подделать эти значения можно. package { import flash.display.Sprite; import flash.display.DisplayObject; public class UnresizableSprite extends Sprite { private var _width: Number; private var _height: Number; private var _ignoreList: Array; public function UnresizableSprite(width: Number, height: Number): void { _width = width; _height = height; } public function set ingoreList(ignoreList: Array): void { _ignoreList = ignoreList; } override public function get width(): Number { return _width; } override public function get height(): Number { return _height; } override public function addChild(obj: DisplayObject): DisplayObject { if (!isIgnored(obj.name)) { if (obj.x + obj.width > _width) { _width = obj.x + obj.width; } if (obj.y + obj.height > _height) { _height = obj.y + obj.height; } } return (super.addChild(obj)); } private function isIgnored(name: String): Boolean { if (!_ignoreList) return false; var i: uint; var len: uint = _ignoreList.length; for (i = 0; i <= len - 1; i++) if (_ignoreList[i] == name) return true; return false; } } } Мне более импонирует первое решение - оно более логично, но, увы, пока не могу найти ответ на свой вопрос - как стандартный класс Sprite определяет размеры своих child? |
![]() |
![]() |
Часовой пояс GMT +4, время: 02:01. |
|
|
« Предыдущая тема | Следующая тема » |
|
|