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];
}
Как