Перейти к содержимому


UISlider с двумя головками


  • Авторизуйтесь для ответа в теме
Сообщений в теме: 18

#1 Гость_iPhone3GS_*

Гость_iPhone3GS_*
  • Гости
    • 0

Отправлено 26 January 2010 - 22:38

Мне нужен UISlider на котором можно задать два параметра:
от: 10 км
до: 20 км
Кто-нибудь делал такое? или может знает как сделать?


#2 Гость_iPhone3GS_*

Гость_iPhone3GS_*
  • Гости
    • 0

Отправлено 27 January 2010 - 13:33

Ну хоть идейка есть?  mellow.gif

#3 sazan

sazan

    Активный участник

  • Адепт
  • 603 сообщений
    • 1
  • Город:Minsk
  • Мой телефон:iPhone 4

Отправлено 27 January 2010 - 13:46

QUOTE (iPhone3GS @ 27.1.2010, 11:33) <{POST_SNAPBACK}>
Ну хоть идейка есть?  mellow.gif

наследуешь от UIControll, добавляешь вьюхи/батоны/другиеКонтролы ... немного танцев с бубном и у тебя готовый кастомный контрол =)

#4 Гость_iPhone3GS_*

Гость_iPhone3GS_*
  • Гости
    • 0

Отправлено 27 January 2010 - 16:01

Цитата(sazan @ 27.1.2010, 13:46) <{POST_SNAPBACK}>
наследуешь от UIControll, добавляешь вьюхи/батоны/другиеКонтролы ... немного танцев с бубном и у тебя готовый кастомный контрол =)

звучит как будто очень много работы... mellow.gif

#5 sazan

sazan

    Активный участник

  • Адепт
  • 603 сообщений
    • 1
  • Город:Minsk
  • Мой телефон:iPhone 4

Отправлено 27 January 2010 - 16:58

QUOTE (iPhone3GS @ 27.1.2010, 14:01) <{POST_SNAPBACK}>
звучит как будто очень много работы... mellow.gif


наследуешь UIImageView, делаешь им делегата, переопределяешь тачи, делегируешь их делегату;

наследуешся от UIControl, заводишь 2 параметра,  накидываешь на него 2 кастомных имагеВью, ставишь делегат селф и обрабатываешь тачи через делегирование :попросту реализуеш драг анд дроп imag (кружков) и посылаешь селфу sendActionsForControlEvents:UIControlEventValueChanged .

инстанциируешь свой контрол, добавляешь таргеt на UIControlEventValueChanged  и в хандлере чекаешь свои параметры.

звучит наверно не понятно, но по каыней мере хоть на мысль должно натокнуть

Сообщение отредактировал sazan: 27 January 2010 - 16:59


#6 Гость_Mellon_*

Гость_Mellon_*
  • Гости
    • 0

Отправлено 28 January 2010 - 00:18

Появилась идея как сделать проще, но будет не так красиво. Под рукой ничего нету, потому объясню на пальцах.
Придётся использовать два слайда:

K --------C=== L
M ===O-------- N

K и N - пределя диапазона. С и O какие-то промежуточные положения каждого из слайдеров. L = значению О, M = значению С. Пример:
1--20======70
20====70---100

Двигаем верхний слайдер вправо, получаем:
1----------55=70
55==70------100
Двигаем нижний влево:
1----------55=58
55=58-------100


Выглядеть будет не так красиво, как на картинке топикастера, но работать с этим можно будет. Особенно если визуально сгруппировать два этих слайдера.

#7 Гость_iPhone3GS_*

Гость_iPhone3GS_*
  • Гости
    • 0

Отправлено 28 January 2010 - 20:17

Цитата(Mellon @ 28.1.2010, 0:18) <{POST_SNAPBACK}>
Появилась идея как сделать проще, но будет не так красиво. Под рукой ничего нету, потому объясню на пальцах.
Придётся использовать два слайда:

K --------C=== L
M ===O-------- N

K и N - пределя диапазона. С и O какие-то промежуточные положения каждого из слайдеров. L = значению О, M = значению С. Пример:
1--20======70
20====70---100

Двигаем верхний слайдер вправо, получаем:
1----------55=70
55==70------100
Двигаем нижний влево:
1----------55=58
55=58-------100


Выглядеть будет не так красиво, как на картинке топикастера, но работать с этим можно будет. Особенно если визуально сгруппировать два этих слайдера.


помоему это проще, чем предложение выше, попробую сначало так
постараюсь положить их друг на друга
спасиб за идею

#8 sazan

sazan

    Активный участник

  • Адепт
  • 603 сообщений
    • 1
  • Город:Minsk
  • Мой телефон:iPhone 4

Отправлено 28 January 2010 - 23:16

QUOTE (iPhone3GS @ 28.1.2010, 18:17) <{POST_SNAPBACK}>
помоему это проще, чем предложение выше, попробую сначало так
постараюсь положить их друг на друга
спасиб за идею

зря отказываешься от моего варианта =)

#9 HappyByte

HappyByte

    Гуру

  • Разработчик
  • 998 сообщений
    • 20
  • Мой телефон:iPhone 4S

Отправлено 28 January 2010 - 23:43

У меня используется два слайдера в одном из проектов. Для двух независимых настроек. Одна из них была добавлена ощутимо позже первой, а то, что это твой вариант - дошло только сейчас smile.gif Ничего некрасивого в этом не вижу.

А насчет своего контрола - я бы просто наследовал UIView и остальное делал бы уже внутри него.

#10 sazan

sazan

    Активный участник

  • Адепт
  • 603 сообщений
    • 1
  • Город:Minsk
  • Мой телефон:iPhone 4

Отправлено 29 January 2010 - 00:15

QUOTE (HappyByte @ 28.1.2010, 21:43) <{POST_SNAPBACK}>
У меня используется два слайдера в одном из проектов. Для двух независимых настроек. Одна из них была добавлена ощутимо позже первой, а то, что это твой вариант - дошло только сейчас smile.gif Ничего некрасивого в этом не вижу.

А насчет своего контрола - я бы просто наследовал UIView и остальное делал бы уже внутри него.

зато в итоге получаешь кастомный контрол с поведением стандартного. разве это не круто?

#11 Гость_iPhone3GS_*

Гость_iPhone3GS_*
  • Гости
    • 0

Отправлено 29 January 2010 - 11:58

Цитата(sazan @ 29.1.2010, 0:16) <{POST_SNAPBACK}>
зря отказываешься от моего варианта =)

погоди, я еще не отказался!
ты не первый, кто мне советует сделать свой UIControl

я просто никогда не делал, поэтому стараюсь обойти этот вариант

#12 Vinny786

Vinny786

    Активный участник

  • Пользователь
  • 252 сообщений
    • 0
  • Мой телефон:iPhone 2G

Отправлено 29 January 2010 - 12:01

Цитата(iPhone3GS @ 29.1.2010, 11:58) <{POST_SNAPBACK}>
я просто никогда не делал, поэтому стараюсь обойти этот вариант

Думаю самое время попробовать сделать )


#13 Гость_iPhone3GS_*

Гость_iPhone3GS_*
  • Гости
    • 0

Отправлено 29 January 2010 - 12:12

Цитата(HappyByte @ 29.1.2010, 0:43) <{POST_SNAPBACK}>
У меня используется два слайдера в одном из проектов. Для двух независимых настроек. Одна из них была добавлена ощутимо позже первой, а то, что это твой вариант - дошло только сейчас smile.gif Ничего некрасивого в этом не вижу.

А насчет своего контрола - я бы просто наследовал UIView и остальное делал бы уже внутри него.

и как ты делал в проекте?  rolleyes.gif


#14 sazan

sazan

    Активный участник

  • Адепт
  • 603 сообщений
    • 1
  • Город:Minsk
  • Мой телефон:iPhone 4

Отправлено 29 January 2010 - 12:37

QUOTE (iPhone3GS @ 29.1.2010, 10:12) <{POST_SNAPBACK}>
и как ты делал в проекте?  rolleyes.gif

1) Кастомишь UIImageView, объявляешь делегат. Обрабатываешь тачи (для драг анд дропа)

2) Наследуешь от UIControl, объявляешь 2 кастомных UIImageView (пункт 1) и одну обычную. кастомные для твоих "бегунков" (thumb image), обычная UIImageView для синей полосы. в .м файле при иницилизации переменных кастомным UIImageView ставишь делегат селф. Реализуешь логику в делегируемом методе, при таче на thumb image они будут перемещается относительно UIControl. В этом же делегируемом методе, хош всегда, хош в какие-то конкретные моменты (например, тока когда тач ап произойдет), посылаешь селфу [self sendActionsForControlEvents: UIControlEventValueChanged];

3)Создаешь экземплр нашего кастомного контрола (пункт 2), добавляешь таргет на событие UIControlEventValueChanged.



#15 Гость_iPhone3GS_*

Гость_iPhone3GS_*
  • Гости
    • 0

Отправлено 29 January 2010 - 12:51

Цитата(sazan @ 29.1.2010, 13:37) <{POST_SNAPBACK}>
1) Кастомишь UIImageView, объявляешь делегат. Обрабатываешь тачи (для драг анд дропа)

2) Наследуешь от UIControl, объявляешь 2 кастомных UIImageView (пункт 1) и одну обычную. кастомные для твоих "бегунков" (thumb image), обычная UIImageView для синей полосы. в .м файле при иницилизации переменных кастомным UIImageView ставишь делегат селф. Реализуешь логику в делегируемом методе, при таче на thumb image они будут перемещается относительно UIControl. В этом же делегируемом методе, хош всегда, хош в какие-то конкретные моменты (например, тока когда тач ап произойдет), посылаешь селфу [self sendActionsForControlEvents: UIControlEventValueChanged];

3)Создаешь экземплр нашего кастомного контрола (пункт 2), добавляешь таргет на событие UIControlEventValueChanged.

эх!
ладно - даваться некуда, надо делать!
Когда сделаю, отчитаюсь...
спасиб те, буду делать как ты сказал


#16 Гость_iPhone3GS_*

Гость_iPhone3GS_*
  • Гости
    • 0

Отправлено 02 February 2010 - 13:22

Цитата(sazan @ 29.1.2010, 13:37) <{POST_SNAPBACK}>
1) Кастомишь UIImageView, объявляешь делегат. Обрабатываешь тачи (для драг анд дропа)

2) Наследуешь от UIControl, объявляешь 2 кастомных UIImageView (пункт 1) и одну обычную. кастомные для твоих "бегунков" (thumb image), обычная UIImageView для синей полосы. в .м файле при иницилизации переменных кастомным UIImageView ставишь делегат селф. Реализуешь логику в делегируемом методе, при таче на thumb image они будут перемещается относительно UIControl. В этом же делегируемом методе, хош всегда, хош в какие-то конкретные моменты (например, тока когда тач ап произойдет), посылаешь селфу [self sendActionsForControlEvents: UIControlEventValueChanged];

3)Создаешь экземплр нашего кастомного контрола (пункт 2), добавляешь таргет на событие UIControlEventValueChanged.


Вот контроллер с двумя Картинками, которые передвигаются по горизонтали.
Как перейти к пунку 2 я не соображу. Хэлп!

Код
#import "DoubleSliderViewController.h"

@implementation DoubleSliderViewController

@synthesize leftThumb, rightThumb;
@synthesize sliderMaxValue, sliderMinValue;

static int IMAGE_RADIUS = 11;
static int NAVIBAR_HEIGHT = 47;

// Implement viewDidLoad to do additional setup after loading the view, typically from a nib.
- (void)viewDidLoad {
    [super viewDidLoad];
    
    if (sliderMinValue==0)
        sliderMinValue=20;
    if (sliderMaxValue==0)
        sliderMaxValue=300;
    CGPoint pLeft;
    pLeft.x=5+IMAGE_RADIUS;
    pLeft.y=5+IMAGE_RADIUS+NAVIBAR_HEIGHT;
    leftThumb.center=pLeft;
    
    CGPoint pRight;
    pRight.x=285+IMAGE_RADIUS;
    pRight.y=5+IMAGE_RADIUS+NAVIBAR_HEIGHT;
    rightThumb.center=pRight;
}


-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {  
    
    UITouch *touch = [touches anyObject];
    CGPoint currentTouchPosition = [touch locationInView:self.view];
    
    leftThumbPoint=leftThumb.center;
    rightThumbPoint=rightThumb.center;
    

    if (currentTouchPosition.x>=sliderMinValue && currentTouchPosition.x <= sliderMaxValue) {
    
        if ( fabsf(currentTouchPosition.x-leftThumbPoint.x)<IMAGE_RADIUS &&
             fabsf(currentTouchPosition.y-leftThumbPoint.y)<IMAGE_RADIUS) { // left Thumb
            
            if (currentTouchPosition.x-leftThumbPoint.x>0 && rightThumbPoint.x-leftThumbPoint.x>IMAGE_RADIUS+IMAGE_RADIUS) { // goRight
                leftThumbPoint.x=currentTouchPosition.x;
            }
            else if (currentTouchPosition.x-leftThumbPoint.x<0) { // goLeft
                leftThumbPoint.x=currentTouchPosition.x;
            }
            [self moveThumb:leftThumb toPosition:leftThumbPoint];
        }
        else if (fabsf(currentTouchPosition.x-rightThumbPoint.x)<IMAGE_RADIUS &&
                 fabsf(currentTouchPosition.y-rightThumbPoint.y)<IMAGE_RADIUS) { // right Thumb
            if (currentTouchPosition.x-rightThumbPoint.x<0 && rightThumbPoint.x-leftThumbPoint.x>IMAGE_RADIUS+IMAGE_RADIUS) { // goLeft
                rightThumbPoint.x=currentTouchPosition.x;
            }
            else if (currentTouchPosition.x-rightThumbPoint.x>0) { // goRight
                rightThumbPoint.x=currentTouchPosition.x;
            }
            [self moveThumb:rightThumb toPosition:rightThumbPoint];
        }        
    }
}

- (void) moveThumb:(UIView *) view toPosition:(CGPoint) position {
    view.center=position;
}




#17 sazan

sazan

    Активный участник

  • Адепт
  • 603 сообщений
    • 1
  • Город:Minsk
  • Мой телефон:iPhone 4

Отправлено 02 February 2010 - 14:45

Прикрепленный файл  ISSlider.zip   14.66К   105 Количество загрузок:

небольшой сэмпл моих идей. звини, нет время делать ко конца, но тут уже нетрудно разобратся.

Good luck !!!

#18 Гость_iPhone3GS_*

Гость_iPhone3GS_*
  • Гости
    • 0

Отправлено 02 February 2010 - 17:19

Цитата(sazan @ 2.2.2010, 15:45) <{POST_SNAPBACK}>
Прикрепленный файл  ISSlider.zip   14.66К   105 Количество загрузок:

небольшой сэмпл моих идей. звини, нет время делать ко конца, но тут уже нетрудно разобратся.

Good luck !!!


еще разбираюсь!
но уже зарание огроменное спасибо!!!
Без UIControl никак низя?


#19 Гость_iPhone3GS_*

Гость_iPhone3GS_*
  • Гости
    • 0

Отправлено 02 February 2010 - 22:28

Цитата(sazan @ 2.2.2010, 14:45) <{POST_SNAPBACK}>
небольшой сэмпл моих идей. звини, нет время делать ко конца, но тут уже нетрудно разобратся.
Good luck !!!


rolleyes.gif спасибо!
все работает! почему работает, ещё не ясно, но главное работает!
sazan это твоя заслуга!





Количество пользователей, читающих эту тему: 0

0 пользователей, 0 гостей, 0 скрытых пользователей


Rambler's Top100