ScrollView v Пользовательский переход (Swift) - PullRequest
0 голосов
/ 23 октября 2018

Я создаю приложение, в котором вы в основном отвечаете на вопросы, а затем проводите влево, чтобы получить следующий вопрос.Мне нравится переход представлений прокрутки и я хотел бы подражать этому.Мне было интересно, будет ли рекомендовано создавать пользовательский переход между контроллерами представления или просто реализовывать представление с прокруткой.

Представление с прокруткой выглядит проще, но не уверен, возможно ли это (или действительно ли это проще).) при рассмотрении следующих предостережений.

Некоторые предостережения: - Можно провести только в одном направлении (невозможно вернуться к предыдущим вопросам) - Необходимо иметь возможность загрузить другой вопрос из источника данных после считывания (очевидно)- Нет заданного количества вопросов (чтобы они могли смахивать навсегда и получать новые вопросы)

Спасибо

Ответы [ 2 ]

0 голосов
/ 24 октября 2018

UIPageViewController может быть хорошим подходом.

Всегда возвращайте nil для viewControllerBefore, чтобы предотвратить "прокрутку назад".

Возвращайте nil для viewControllerAfter, пока пользователь не ответит на текущий вопрос, чтобы предотвратить "прокрутку вперед"рано.

0 голосов
/ 23 октября 2018

После прочтения вашего требования, наиболее подходящим виджетом пользовательского интерфейса будет UICollectionView.

Вот несколько моментов, которые помогут скрыть ваше требование.

1.Определение размера ячейки

Возможно, вы захотите показать связанные с вопросом и ответом представления во всем представлении, в этом случае представление вашей коллекции будет прикреплено к top, bottom, left,right с ограничением, и размер вашей ячейки будет равен размеру границы представления коллекции.

Реализация делегата UICollectionViewFlowLayoutDelegate

func collectionView(_ collectionView: UICollectionView, 
                  layout collectionViewLayout: UICollectionViewLayout, 
           sizeForItemAt indexPath: IndexPath) -> CGSize {
    return collectionView.bounds.size
}

2.Включить пейджинг

Включить пейджинг в collectionView, чтобы прокрутка не оставалась ни при каком разрыве (т. Е. Прокрутка остановилась между двумя вопросительными ячейками).

collectionView.isPagingEnabled = true

3.Блокировка направления прокрутки (только прокрутка вправо)

Если вы нацелились на iOS 11.0+, у вас может быть вид @ UICollectionViewDragDelegate ( appledoc ), который обеспечит богатый наборфункциональность для достижения этой цели.

В противном случае я хотел бы предложить вам использовать следующие

public func scrollViewDidScroll(_ scrollView: UIScrollView)

, которые будут уведомлять вас о каждом отдельном пользователе, выполняющем прокрутку в вашем CollectionView.Это метод из UIScrollView и UICollectionView, унаследованный от UIScrollView.

var lastOffsetX = -1
public func scrollViewDidScroll(_ scrollView: UIScrollView) {

    // for the first time only
    if lastOffset < 0 {
        lastOffsetX = scrollView.contentOffset.x
        return
    }


    if lastOffset > scrollView.contentOffset.x {
        // stick to the right most position -- not enabling the user to go left
        scrollView.contentOffset.x = lastOffset
    } else {
        // take the user ahead to the right position
        lastOffset = scrollView.contentOffset.x
    }        
}

. При такой обработке вы можете столкнуться с проблемой, заключающейся в том, что установка contentOffset внутри scrollViewDidScroll может привести к запускуscrollViewDidScroll метод.Если вы сталкиваетесь с этим, вы можете взглянуть на этот ответ .Конечно, я не запускал этот код, но с несколькими исключениями, он должен работать.

Надеюсь, это поможет, Счастливого кодирования.

...