TIPullToRefresh/README.md

5.3 KiB
Raw Permalink Blame History

RMRPullToRefresh

==

Репозиторий pull to refresh контрола для UIScrollView, UITableView, UICollectionView для платформы iOS.

Как установить?

pod 'RMRPullToRefresh', :git => "git@git.redmadrobot.com:helper-ios/RMRPullToRefresh.git"

Как добавить?

import RMRPullToRefresh

var pullToRefresh: RMRPullToRefresh?

pullToRefresh = RMRPullToRefresh(scrollView: tableView, 
                                   position: .Top) { [weak self] _ in // .Top или .Bottom
            // Загрузка данных
            self?.service.load() { _ in
                // Завершение загрузки
                self?.pullToRefresh?.stopLoading()
            })
        }

Чтобы завершить анимацию, необходимо выполнить:

pullToRefresh?.stopLoading() // Завершиться с результатом .Success

или

pullToRefresh?.stopLoading(.Success) // .Success, .NoUpdates, .Error

Позиции

public enum RMRPullToRefreshPosition: Int {
    case Top // Для добавления контрола сверху скрола
    case Bottom // Для добавления контроль снизу скрола
}

Состояния

public enum RMRPullToRefreshState: Int {
    case Stopped // Нет скролинга, нет загрузки
    case Dragging // Скролинг
    case Loading // Загрузка
}

Тип результата

public enum RMRPullToRefreshResultType: Int {
    case Success // Загрузка завершилась успешно и есть обновления
    case NoUpdates // Загрузка завершилась успешно, но обновлений нет
    case Error // Загрузка завершилась с ошибкой
}

Как кастомизировать?

Существует два метода для конфигурации кастомных view:

func configureView(view :RMRPullToRefreshView, state:RMRPullToRefreshState, result:RMRPullToRefreshResultType) 
func configureView(view :RMRPullToRefreshView, result:RMRPullToRefreshResultType) // Будет сконфигурировано для состояний .Loading, .Dragging и .Stopped

Пример:

// Конфигурируем view для состояний .Dragging и .Loading для результата .Success
if let pullToRefreshView = BeelineView.XIB_VIEW() {
            pullToRefresh?.configureView(pullToRefreshView, state: .Dragging, result: .Success)
            pullToRefresh?.configureView(pullToRefreshView, state: .Loading, result: .Success)
        }

Кастомная view должна наследоваться от класса RMRPullToRefreshView и для анимирования должны быть реализованы методы протокола RMRPullToRefreshViewProtocol:

// Подготовка к анимации загрузки
// Вызываться перед beginLoadingAnimation()
public func prepareForLoadingAnimation(startProgress: CGFloat) {}

// Начало анимации
public func beginLoadingAnimation() {} 
    
// Завершение анимации
// Будет вызываться сразу после завершения загрузки
public func willEndLoadingAnimation() {}

// Завершение анимации
// Будет вызывать через время, равное hideDelay после завершения загрузки
// @param hidden - флаг будет скрыт контрол или нет после завершения анимации
public func didEndLoadingAnimation(hidden: Bool) {}
    
// Изменения прогресса скролинга
public func didChangeDraggingProgress(progress: CGFloat) {}

Настройки

Для задания RedMadRobot дизайна:

pullToRefresh?.setupDefaultSettings()

Изменить высоту (по умолчанию 90.0):

pullToRefresh?.height = 70.0

Изменить цвет бэкграунда (по умолчанию whiteColor()):

pullToRefresh?.backgroundColor = UIColor(red: 16.0/255.0, 
                                       green: 192.0/255.0, 
                                        blue: 119.0/255.0, 
                                       alpha: 1.0)

Для задания времени закрытия контрола (по умолчанию 0.0):

pullToRefresh?.setHideDelay(5.0, result: .Success) // .Success, .NoUpdates, .Error

Если не хотим скрывать контрол с ошибкой (не забудьте установить view для .Error):

pullToRefresh?.hideWhenError = false