суббота, 26 сентября 2015 г.

26. Controls: UISlider, UISwitch, UISegmentedControl

Видео урок находится здесь.
В этом уроке рассматриваются элементы управления (controls): UISlider, UISwitch, UISegmentedControl.

С помощью сторибоард создаем контролы.
UISlider - слайдер, полоска с бегунком.
UISwitch - переключатель имеющий 2 положения (включено/выключено).
UISegmentedControl - переключатель с множеством вариантов, но выбрать можно только один вариант.

После создания контролов и событий, заголовочный файл выглядит так:

@property (weak, nonatomic) IBOutlet UILabel *infoLabel;
@property (weak, nonatomic) IBOutlet UISlider *redComponentSlider;
@property (weak, nonatomic) IBOutlet UISlider *greenComponentSlider;
@property (weak, nonatomic) IBOutlet UISlider *blueComponentSlider;
@property (weak, nonatomic) IBOutlet UISegmentedControl* colorSchemeControl;


- (IBAction)actionSlider:(UISlider *)sender;

- (IBAction)actionEnable:(UISwitch *)sender;


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

    CGFloat red = self.redComponentSlider.value;
    CGFloat green = self.greenComponentSlider.value;
    CGFloat blue = self.blueComponentSlider.value;

При переключении свитча вызывается actionEnable.
Для того, чтобы считать значения переключателя, используется измененный геттер sender.isOn :
@property(nonatomic,getter=isOn) BOOL on;

Для отключения control от сообщений, применяется property .enable
    self.redComponentSlider.enabled = self.greenComponentSlider.enabled = self.blueComponentSlider.enabled = sender.isOn;

В процессе перетягивания переключателя switch  приходит много сообщений(событий), если это мешает (большие вычисления или анимация), можно сделать задержку обработки сообщений на короткое время:
    [[UIApplication sharedApplication] beginIgnoringInteractionEvents];
    double delayInSeconds = 0.4f;
    dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(delayInSeconds * NSEC_PER_SEC));
    dispatch_after(popTime, dispatch_get_main_queue(), ^(void){
        
        if ([[UIApplication sharedApplication] isIgnoringInteractionEvents]) {
            [[UIApplication sharedApplication] endIgnoringInteractionEvents];
        }
    });
Приложение игнорирует события, происходит задержка на 0.4 секунды, затем заканчивается режим игнорирования событий.

Для контрола UISegmentedControl в данном примере состоит из 2-х возможных значений, создадим энную (чтобы не обращаться по неинфврмативному индексу 0 и 1):
typedef enum {
    
    ASColorSchemeTypeRGB,
    ASColorSchemeTypeHSV
    

} ASColorSchemeType;

Для установки выбранного значения задаем 0 индекс или ASColorSchemeTypeRGB

    self.colorSchemeControl.selectedSegmentIndex = ASColorSchemeTypeRGB;

Для определения какой элемент выбран:
   if (self.colorSchemeControl.selectedSegmentIndex == ASColorSchemeTypeRGB)



Домашнее задание к уроку 26 - Controls:

Ученик.

1. Расположите тестируюмую вьюху на верхней половине экрана
2. На нижней половине создайте 3 свича: Rotation, Scale, Translation. По умолчанию все 3 выключены
3. Также создайте сладер скорость, со значениями от 0.5 до 2, стартовое значение 1
4. Создайте соответствующие проперти для свитчей и слайдера, а также методы для события valueChanged

Студент.

5. Добавьте сегментед контрол с тремя разными сегментами
6. Они должны соответствовать трем разным картинкам, которые вы должны добавить
7. Когда переключаю сегменты, то картинка должна меняться на соответствующую

Мастер.

8. Как только мы включаем один из свичей, наша вьюха должна начать соответствующую анимацию
(либо поворот, либо скеил, либо перенос). Используйте свойство transform из урока об анимациях
9. Так же следует помнить, что если вы переключили свич, но какойто другой включен одновременно с ним, то вы должны делать уже двойную анимацию. Например и увеличение и поворот одновременно (из урока про анимации)
10. Анимации должны быть бесконечно повторяющимися, единственное что их может остановить, так это когда все три свича выключены

Супермен.

11. Добавляем использование слайдера. Слайдер регулирует скорость. То есть когда значение на 0.5, то скорость анимаций должна быть в два раза медленнее, а если на 2, то в два раза быстрее обычной.
12. Попробуйте сделать так, чтобы когда двигался слайдер, то анимация обновлялась без прерывания, а скорость изменялась в соответствующую сторону.

Выполнены все задания к 26 уроку и много чего плюсом.



Horror Controls - 3 анимированных призрака, 4 параметра анимации, можно все параметры независимо друг от друга менять. При изменении призраков и параметров для редактирования восстанавливается соответствующее значения слайдера и светлей.

Исходный код приложения здесь.



Комментариев нет:

Отправить комментарий