2014-09-07 3 views
4

Я новичок в разработке Swift и iOS, и я хочу создать серию представлений или «карт», которые можно прокрутить влево и вправо, при этом следующие/предыдущие карты останутся на чтобы указать, что они есть. Это делается в предпросмотра IOS App Store:Swift-способ просмотра

App store preview

До сих пор все, что я действительно нашел это средняя статья: iOS Swift: Swipe View. Однако я не уверен, что это правильный способ сделать то, о чем я прошу выше, и я также не знаю, как заставить следующую/предыдущую карту оставаться на краях при каждом прокрутке.

У кого-нибудь есть советы по достижению этого?

ответ

9

Самый простой способ - использовать UICollectionView и UICollectionViewFlowLayout. UICollectionViewFlowLayout предоставляется из коробки и является очень мощным.

В основном вам нужно:

  1. Добавить UICollectionView в контроллер представления.
  2. По умолчанию UICollectionView идет с Flow выбран макет.
  3. Настройка UICollectionViewFlowLayout
    • Установить направление прокрутки по горизонтали
    • Определение размера элемента и интервал между ними. Имейте в виду, что вам нужно всего лишь один элемент, чтобы он был полностью виден; кроме того, должны быть видны и пробелы слева и справа; еще больше вам нужно показать куски предыдущей и следующей карт, так что некоторые основные математики ждут вас :). Один небольшой трюк, который сделает вас первыми и последними картами правильно центрированными: вы должны указывать вставки вертикального сечения равными сумме видимой ширины предыдущей карты плюс пробел между картами.

шаги выше должно быть достаточно, чтобы иметь вертикально прокручивать карты зрения. Но это не будет здорово! Чтобы это было здорово, вам, вероятно, необходимо полностью сконцентрироваться на самой подходящей карте после прокрутки пользовательского конца. Для достижения липкой прокрутки вы должны работать со следующими UICollectionViewDelegate методами:

// compute collection view content offset in method bellow 
override func scrollViewDidEndDragging(scrollView: UIScrollView, willDecelerate decelerate: Bool) { 
    ... 
} 

// compute targetContentOffset in method bellow 
override func scrollViewWillEndDragging(scrollView: UIScrollView, withVelocity velocity: CGPoint, targetContentOffset: UnsafeMutablePointer<CGPoint>) { 
    ... 
} 

... последний намек: сделать вид коллекции торможения выглядеть быстро в коде контроллера представления сделать:

self.collectionView?.decelerationRate = UIScrollViewDecelerationRateFast 

Индикатор пейджинга:

В примере, который вы предоставляете, имеется элемент управления поисковым вызовом, который отражает текущий элемент и общее количество элементов. Вам необходимо добавить UIPageControll вручную; вы можете сделать это в раскадровке. Лучшее место для обновления состояния управления страницы будет:

// method in UICollectionView delegate that you need to define. 
// update your paging info in method bellow. 
override func scrollViewDidScroll(scrollView: UIScrollView) { 
    ...  
} 

Примечания:

Методы, которые имеют дело с точки зрения прокрутки, которые я перечислил, наследуются UICollectionViewDelegate от UIScrollViewDelegate.UICollectionView сам по себе от UIScrollViewDelegate.

+0

Это закончило работать отлично! Спасибо! Одна часть, которую я не совсем понимаю, - это липкая прокрутка - если вы за нее и чувствуете, что ее разрабатываете, я был бы очень благодарен. Если нет, все в порядке! В любом случае спасибо! –

+0

Ive читал, и, похоже, я могу использовать 'targetContentOffset.memery.x', чтобы найти, где будет прокрутка ... но я не уверен, как перемещать ближайшую ячейку в центр с этой информацией? –

+1

@ Кинлес Я понял это! Я установил 'collectionOffset = 0', а затем в' scrollViewWillEndDragging' я проверил, было ли 'targetContentOffset.memory.x' больше, чем' collectionOffset + 255', если тогда было установлено значение targetContentOffset и collectionOffset для 'collectionOffset + 255'. . etc –

Смежные вопросы