ПРОГРАММИРОВАНИЕ ПОД IPHONE, IPAD OBJECTIVE-C часть 2

UISlider

Если вам нужно дать возможность пользователю устанавливать какое-то значение переменной с сегмента возможных значений — удобнее вещи чем UISlider сложно найти. Чаще всего он используется для установки уровня громкости и в этом выможете убедится, зайдя в настройки телефона. В этом примере я покажу как самостоятельно добавить такой элемент интерфейса и работать с ним.

 

Для начала создадим новый проект на основе представления (View-based Application) и назовем его MySlider. И изменим в нем класс MySliderViewController:

 

MySliderViewController.h

<code data-result="[object Object]">#import &lt;UIKit/UIKit.h&gt;

@interface MySliderViewController : UIViewController {
    UISlider *mySlider;
}

@property (nonatomic, retain) IBOutlet UISlider *mySlider;

- (IBAction)changValue;

@end</code>

 

Здесь мы добавили новый объект интерфейса (который позже свяжем с *.xib-файлом) и метод, который будет вызваться при изменение значения объекта mySlider.

 

MySliderViewController.m

<code data-result="[object Object]">#import "MySliderViewController.h"

@implementation MySliderViewController

@synthesize mySlider;

- (void)dealloc {
    self.mySlider = nil;
    [super dealloc];
}

- (void)viewDidUnload
{
    [super viewDidUnload];
    self.mySlider = nil;
}

- (void)viewDidLoad
{
    [super viewDidLoad];
}

- (IBAction)changValue {
    NSLog(@"%f", mySlider.value);
}

@end</code>

 

В реализации мы синтезировали методы доступа для переменной mySlider и организовали очистку памяти. А в методе changValueпросто выводим текущее значение слайдера в консоль.

 

Теперь пришло время связать написаный код с интерфейсом. Нажмите на файл MySliderViewController.xib левой кнопкой мышки. Откройте боковую панель утилитов, найдите и перетяните на интерфейс обект Slider. Должно получиться, как на картинке ниже.

 

 

Далее нажмите правой кнопкой на объект File’s Owner, найдите в нем поле с именем mySlider, с права от него будет кружок (при наведении на него в кружке появится крестик). Нажмите на этот крестик и тяните до только что добавленного слайдера, затем отпустите кнопку мышки.

 

 

Таким образом мы связали объект mySlider с объектом интерфейса. Точно так же свяжем метод changValue с событием изменения значения. Снова нажмите правой кнопкой на File’s Owner, только теперь найдите поле с именем changValue. Возле него точно так же будет кружок, в котором прорисовывается крестик, при наведении на него курсора. Нажмите на этот крестик и перетяните на слайдер. Но теперь при отпускании кнопки мышки вы увидите список событий с которыми можно связать этот метод. Чаще всего мы использвали только одно событие (Touch Up Inside) оно вызывается при отпускании кнопки. Но сейчас мы имеем дело не с кнопкой, для слайдера характерен метод Value Changed. Дело в том, что кнопка не имеет никакого конкретного значение, которое изменяется в момент нажатия на нее или отпускания. В случае с кнопкой нам важно знать, нажимали на нее или нет. Тогда как со слайдером нам нужно знать его значение каждый раз когда оно изменяется. Теперь выберите с выпадающего списка метод Value Changed.

 

После всех этих операций можете запускать проект. При перетягивании ползунка в консоль будет выводиться инрформация о текущем значении слайдера.

 

Максимальное и минимальное значение слайдера, а так же шаг изменения можно указать в его свойствах:

 

 

Обращаю ваше внимание на свойство Update Events. Если возле него стоит галочка — метод слайдера (в нашем случае changValue) будет вызваться во время движения ползунка. Если галочку убрать — метод слайдера вызовится только в момент отпускания пальца от ползунка.

 

Теперь придадим нашему слайдеру новый вид. Для этого используем картинки, которые я заранее подготовил. Скачать их можноотсюда. Распакуйте скачаный архив и добавьте файлы в проект. Применим добавленные картинки в методе viewDidLoad к нашему слайдеру:

 

<code data-result="[object Object]">- (void)viewDidLoad
{
    [super viewDidLoad];

    UIImage *stetchLeftTrack = [[UIImage imageNamed:@"minSlide.png"]
                                stretchableImageWithLeftCapWidth:10.0f topCapHeight:0.0f];
    UIImage *stetchRightTrack = [[UIImage imageNamed:@"maxSlide.png"]
                                 stretchableImageWithLeftCapWidth:10.0f topCapHeight:0.0f];
    [mySlider setThumbImage: [UIImage imageNamed:@"sliderBall.png"] forState:UIControlStateNormal];
    [mySlider setMinimumTrackImage:stetchLeftTrack forState:UIControlStateNormal];
    [mySlider setMaximumTrackImage:stetchRightTrack forState:UIControlStateNormal];
}</code>

 

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

 

Исходный код проекта можно сказать здесь.