Вандад Нахавандипур

iOS. Приемы программирования


Скачать книгу

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

      • scrollViewDidScroll: – вызывается всякий раз, когда содержимое прокручиваемого вида прокручивается;

      • scrollViewWillBeginDecelerating: – вызывается, когда пользователь прокручивает содержимое вида и отрывает палец от сенсорного экрана в то время, как вид продолжает прокручиваться;

      • scrollViewDidEndDecelerating: – вызывается, когда прокручивание информации, содержащейся в виде, заканчивается;

      • scrollViewDidEndDragging: willDecelerate: – вызывается, когда пользователь завершает перетаскивание содержимого в прокручиваемом виде. Этот метод очень напоминает scrollViewDidEndDecelerating:, но следует помнить, что пользователь может перетаскивать элементы содержимого такого вида и не прокручивая его. Можно просто прикоснуться пальцем к элементу содержимого, переместить палец в другую точку на экране, а потом оторвать палец от экрана, не сдвинув содержимое самого вида ни на миллиметр. Этим перетаскивание и отличается от прокрутки. Прокрутка напоминает перетаскивание, но пользователь «сообщает импульс», приводящий к перемещению содержимого, если снимает палец с экрана, пока информация еще прокручивается. То есть пользователь убирает палец, не дождавшись завершения прокрутки. Перетаскивание можно сравнить с тем, как вы удерживаете педаль газа в машине или педаль велосипеда. Продолжая эту аналогию, можно сравнить прокрутку с движением по инерции на машине или велосипеде.

      Сделаем предыдущее приложение немного интереснее. Теперь нужно установить уровень яркости картинки в нашем виде с изображением (этот показатель также называется «альфа-уровень» или «альфа-значение») равным 0.50f (полупрозрачный) на момент, когда пользователь начинает прокрутку изображения, и вернуть этот уровень к значению 1.0f (непрозрачный) к моменту, когда прокрутка завершается. Сначала обеспечим соответствие протоколу UIScrollViewDelegate:

      #import "ViewController.h"

      @interface ViewController () <UIScrollViewDelegate>

      @property (nonatomic, strong) UIScrollView *myScrollView;

      @property (nonatomic, strong) UIImageView *myImageView;

      @end

      @implementation ViewController

      Потом реализуем данную функциональность:

      – (void)scrollViewDidScroll:(UIScrollView *)scrollView{

      /* Вызывается, когда пользователь совершает прокрутку

      или перетаскивание. */

      self.myScrollView.alpha = 0.50f;

      }

      – (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView{

      /* Вызывается только после прокрутки. */

      self.myScrollView.alpha = 1.0f;

      }

      – (void)scrollViewDidEndDragging:(UIScrollView *)scrollView

      willDecelerate:(BOOL)decelerate{

      /* Гарантируем, что альфа-значение вернется к исходному,

      даже если пользователь просто перетаскивает элементы. */

      self.myScrollView.alpha = 1.0f;

      }

      – (void)viewDidLoad{

      [super viewDidLoad];

      UIImage *imageToLoad = [UIImage imageNamed:@"MacBookAir"];

      self.myImageView = [[UIImageView alloc] initWithImage: imageToLoad];

      self.myScrollView = [[UIScrollView alloc] initWithFrame: self.view.bounds];

      [self.myScrollView addSubview: self.myImageView];

      self.myScrollView.contentSize = self.myImageView.bounds.size;

      self.myScrollView.delegate = self;

      [self.view addSubview: self.myScrollView];

      }

      Как