![]() |
|
||||||||||
|
|||||
|
Регистрация: Jun 2005
Сообщений: 9
|
всем привет.
как заменить стандартные кнопки вверх вниз и бегунок у UIScrollBar на свои клипы? setSkin? не могу догнать как он используется. если можно пальцах. тема конечно не один раз обсуждалась... но ничего путного не нашел, наверно не умею искать. если в хелп то предметно если в поиск то тоже. заранее спасибо |
|
|||||
|
Не хотел начинать новую тему, поэтому задам вопрос тут.
Можно ли подцепить UIScrollBar для скролинга не текста а графики, может какие примеры кто подбросит, буду очень благодарен ![]() |
|
|||||
|
Modus ponens
|
import flash.geom.ColorTransform;
import flash.geom.Transform;
class Slid {
var __body:MovieClip;
var __handle:MovieClip;
var __lArr:MovieClip;
var __rArr:MovieClip;
var __ct:ColorTransform;
function Slid(_mc:MovieClip, dir:Boolean, dim:Number, _tgt) {
trace("Slider for: "+_tgt);
__ct = new ColorTransform();
var me:Slid = this.me();
var overColor:Function = function () {
var __ct:ColorTransform = new ColorTransform();
var trans:Transform = new Transform(this);
__ct.rgb = Usr.__col.__over;
trans.colorTransform = __ct;
};
var downColor:Function = function () {
var __ct:ColorTransform = new ColorTransform();
var trans:Transform = new Transform(this);
__ct.rgb = Usr.__col.__out;
trans.colorTransform = __ct;
};
var outColor:Function = function () {
var __ct:ColorTransform = new ColorTransform();
var trans:Transform = new Transform(this);
__ct.rgb = Usr.__col.__down;
trans.colorTransform = __ct;
};
if (dir) {
__body = _mc.createEmptyMovieClip("__body", _mc.getNextHighestDepth());
with (__body) {
beginFill(Usr.__col.__out, 100);
moveTo(0, 0);
lineTo(10, 0);
lineTo(10, dim);
lineTo(0, dim);
lineTo(0, 0);
endFill();
}
__ct.rgb = Usr.__col.__down;
__rArr = __body.attachMovie("arr", "__rArr", __body.getNextHighestDepth());
with (__rArr) {
_rotation = -90;
_y = 10;
}
__rArr.onRollOver = overColor;
__rArr.onRollOut = outColor;
var trans:Transform = new Transform(__rArr);
trans.colorTransform = __ct;
__lArr = __body.attachMovie("arr", "__lArr", __body.getNextHighestDepth());
with (__lArr) {
_rotation = 90;
_y = dim-10;
_x = 10;
}
__lArr.onRollOver = overColor;
__lArr.onRollOut = outColor;
var trans:Transform = new Transform(__lArr);
trans.colorTransform = __ct;
__handle = __body.attachMovie("sl", "__handle", __body.getNextHighestDepth());
with (__handle) {
_y = 11;
_rotation = 90;
_x = 10;
}
__handle.onRollOver = overColor;
__handle.onRollOut = outColor;
__handle._minY = __handle._y;
__handle._maxY = __handle._y+__body._height-38;
__handle._circut = __body._height-38;
var trans:Transform = new Transform(__handle);
trans.colorTransform = __ct;
__handle.onPress = function() {
Evt.regSlid(me);
this._regPoint = this._ymouse;
this.onEnterFrame = function() {
if (this._y<=this._maxY && this._y>=this._minY) {
this._y = this._parent._ymouse-this._regPoint;
if (this._y>this._maxY) {
this._y = this._maxY;
}
if (this._y<this._minY) {
this._y = this._minY;
}
_tgt.__scroll((this._y-this._minY)/(this._circut/100));
}
};
};
__handle.onRelease = function() {
var __ct:ColorTransform = new ColorTransform();
var trans:Transform = new Transform(this);
__ct.rgb = Usr.__col.__down;
trans.colorTransform = __ct;
delete this.onEnterFrame;
};
__handle.onReleaseOutside = __handle.onRelease;
__handle.__move = function(_arr:Array):Void {
var shift:Number = _arr[0]-_arr[2];
var maxShift:Number = _arr[1]-_arr[3];
var pc:Number = shift/(maxShift/100);
this._y = this._minY+this._circut*pc/100;
};
} else {
__body = _mc.createEmptyMovieClip("__body", _mc.getNextHighestDepth());
with (__body) {
beginFill(Usr.__col.__out, 100);
moveTo(0, 0);
lineTo(dim, 0);
lineTo(dim, 10);
lineTo(0, 10);
lineTo(0, 0);
endFill();
}
__ct.rgb = Usr.__col.__down;
__rArr = __body.attachMovie("arr", "__rArr", __body.getNextHighestDepth());
with (__rArr) {
_rotation = 180;
_y = 10;
_x = 10;
}
__rArr.onRollOver = overColor;
__rArr.onRollOut = outColor;
var trans:Transform = new Transform(__rArr);
trans.colorTransform = __ct;
__lArr = __body.attachMovie("arr", "__lArr", __body.getNextHighestDepth());
with (__lArr) {
_x = dim-10;
}
__lArr.onRollOver = overColor;
__lArr.onRollOut = outColor;
var trans:Transform = new Transform(__lArr);
trans.colorTransform = __ct;
__handle = __body.attachMovie("sl", "__handle", __body.getNextHighestDepth());
with (__handle) {
_x = 11;
}
__handle.onRollOver = overColor;
__handle.onRollOut = outColor;
__handle._minX = __handle._x;
__handle._maxX = __handle._x+__body._width-38;
__handle._circut = __body._width-38;
var trans:Transform = new Transform(__handle);
trans.colorTransform = __ct;
__handle.onPress = function() {
Evt.regSlid(me);
this._regPoint = this._xmouse;
this.onEnterFrame = function() {
if (this._x<=this._maxX && this._x>=this._minX) {
this._x = this._parent._xmouse-this._regPoint;
if (this._x>this._maxX) {
this._x = this._maxX;
}
if (this._x<this._minX) {
this._x = this._minX;
}
_tgt.__scroll((this._x-this._minX)/(this._circut/100));
}
};
};
__handle.onRelease = function() {
var __ct:ColorTransform = new ColorTransform();
var trans:Transform = new Transform(this);
__ct.rgb = Usr.__col.__down;
trans.colorTransform = __ct;
delete this.onEnterFrame;
};
__handle.onReleaseOutside = __handle.onRelease;
__handle.__move = function(_arr:Array):Void {
var shift:Number = _arr[0]-_arr[2];
var maxShift:Number = _arr[1]-_arr[3];
var pc:Number = shift/(maxShift/100);
this._x = this._minX+this._circut*pc/100;
};
}
__lArr.onPress = function() {
Evt.regSlid(me);
this.onEnterFrame = function() {
var tmp_arr:Array = _tgt.__move(false, 5);
Usr.__slid.__handle.__move(tmp_arr);
};
};
__lArr.onRelease = function() {
var __ct:ColorTransform = new ColorTransform();
var trans:Transform = new Transform(this);
__ct.rgb = Usr.__col.__down;
trans.colorTransform = __ct;
delete this.onEnterFrame;
};
__lArr.onReleaseOutside = __lArr.onRelease;
__rArr.onPress = function() {
Evt.regSlid(me);
this.onEnterFrame = function() {
var tmp_arr:Array = _tgt.__move(true, 5);
Usr.__slid.__handle.__move(tmp_arr);
};
};
__rArr.onRelease = function() {
var __ct:ColorTransform = new ColorTransform();
var trans:Transform = new Transform(this);
__ct.rgb = Usr.__col.__down;
trans.colorTransform = __ct;
delete this.onEnterFrame;
};
__rArr.onReleaseOutside = __rArr.onRelease;
}
function me():Slid {
return this;
}
}
Usr.__col - ссылка на статическую переменную класса Usr содержащую массив цетов в шестнадцатиричном представлении. Usr.__slid.__handle - ссылка на текущий активный ползунок-скроллер Evt.regSlid(me); - регистрация текущего активного ползунка Для реализации элементов управления скроллером используются 2 клипа из библиотеки "arr" и "sl" - вот их-то можно нарисовать как угодно, ну и соответственно потом размеры подогнать, у меня они были 10х10 и 13х13 соответственно =) пример подключения и использования: class ListMenue {
var __body:MovieClip;
private var __mask:MovieClip;
private var __holder:MovieClip;
var __list_arr:Array = [];
var __slid:Slid;
var __long:Boolean = false;
function ListMenue(_mc:MovieClip, _arr:Array, h:Number) {
__body = _mc;
__holder = __body.createEmptyMovieClip("__holder", 0);
__list_arr = [];
for (var i:Number = 0; i<_arr.length; i++) {
var _tmp_mc:MovieClip = __holder.createEmptyMovieClip("_tmp"+i, __holder.getNextHighestDepth());
var tmp_dir:String = _arr[i].uri;
var func:Function = function (_str:String) {
Evt.selectCategory(_str);
Usr.__gallery.changeSubCategory();
};
var _temp_bt:But = new But(_tmp_mc, _arr[i], {h:25, w:190, _id:i, _father:this, _skinned:true}, func);
__list_arr.push(_temp_bt);
_tmp_mc._y = i*(_tmp_mc._height+1);
}
__mask = __body.createEmptyMovieClip("__mask", 2);
with (__mask) {
beginFill(0, 100);
moveTo(0, 0);
lineTo(_mc._width, 0);
lineTo(_mc._width, h);
lineTo(0, h);
lineTo(0, 0);
endFill();
}
__holder.setMask(__mask);
__holder._absY = __holder._y;
if (__holder._height>__mask._height) {
__long = true;
}
}
public function __move(dir:Boolean, step:Number):Array {
if (__long) {
if (dir) {
__holder._y += step;
if (__holder._y>__mask._y) {
__holder._y = __mask._y;
}
} else {
__holder._y -= step;
if (__holder._y+__holder._height<__mask._y+__mask._height) {
__holder._y = __mask._y+__mask._height-__holder._height;
}
}
}
return [__holder._absY, __holder._height, __holder._y, __mask._height];
}
public function __scroll(percent:Number) {
if (__long) {
var pc:Number = (__holder._height-__mask._height)/100;
__holder._y = __holder._absY-pc*percent;
}
}
public function selectBut(_n:Number):Void {
for (var i:Number = 0; i<__list_arr.length; i++) {
if (i == _n) {
__list_arr[i].sel(true);
} else {
__list_arr[i].sel(false);
}
}
}
}
__________________
Hell is the possibility of sanity |
|
|||||
|
У меня это всё сразу чтото заэррорило
![]() Пример покажи... |
|
|||||
|
Modus ponens
|
http://www.semel-kitchens.co.il/
=) В исходниках не хватает трех классов But, Evt, Usr, но они не имеют непосредственного отношения к делу, собственно: But - создает кнопку Evt - в данном конкретном случае переключает между скроллерами (если на сцене есть больше чем 1 скроллер, чтобы знать, кого двигать) Usr - класс с набором статических переменных, в данном случае содержит всякую мишуру типа цветов, количества категорий\подкатегорий, текущие активные элементы управления и т.п. PS. Сайт пока на стадии разработки, так что не все там работает. Если очень захочется - могу выложить все исходники к нему. =) //поправил ссылку, но она наверное тоже долго не проживет. Я больше над этим работать не буду, хз чего с этим будет =)
__________________
Hell is the possibility of sanity Последний раз редактировалось wvxvw; 19.05.2007 в 21:05. |
|
|||||
|
Modus ponens
|
2 Nirth:
Если вопрос ко мне, то компонент от ММ не устраивает по таким причинам: - отсутствие возможности нормального редактирования (конечно, можно декомпилировать, и потом собрать заново, но это и не красиво, да и не стоит оно того, как по мне...) - весит больше (флешка в примере весит около 7,5 К, в готовом виде будет что-то около 10 К) если бы я ее делал используя компоненты от ММ - было бы как минимум в 2 раза больше... - Естесственно, мне со своим кодом проще жить, чем с чужим %) Но это по-сути пункт №1 =) - Ползунок скроллера в стандартных компонентах перемещается не очень точно: когда дотаскиваешь его до максимального значения он немного "подпрыгивает" назад - мне кажется, что это не очень красиво...
__________________
Hell is the possibility of sanity |
|
|||||
|
Регистрация: Jun 2006
Сообщений: 15
|
а можно еще раз пример...ссылка вроде битая...
|
![]() |
![]() |
Часовой пояс GMT +4, время: 06:19. |
|
|
« Предыдущая тема | Следующая тема » |
|
|