UICollectionView Определение направления прокрутки и изменение изображения - PullRequest
0 голосов
/ 27 сентября 2018

Я использую UICollectionView для создания смахивания, похожего на Tinder Swipe.Я хочу определить направление прокрутки, когда пользователь начинает перетаскивать перед отображением новой страницы (карточки).При его обнаружении следует установить для изображения значение «Большие пальцы вверх» (пролистывание вправо) или «Большие пальцы вниз» (пролистывание влево).

Теперь я использую scrollViewWillBeginDragging, и он почти работает со сравнением contentOffset, но это не то, что я ищу, так как отображает изображение с опозданием.

import UIKit

class ViewController: UIViewController, UICollectionViewDelegate, UICollectionViewDataSource, UICollectionViewDelegateFlowLayout, UIGestureRecognizerDelegate{

    var imageArray = [UIImage(named: "profil"), UIImage(named: "profil"),UIImage(named: "profil"),UIImage(named: "profil"),UIImage(named: "profil"),UIImage(named: "profil"),UIImage(named: "profil")]

    @IBOutlet weak var thumbImage: UIImageView!
    var currentPage = 0

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

    func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
        return imageArray.count
    }

    func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
        let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "ImageCollectionViewCell", for: indexPath) as! ImageCollectionViewCell

        cell.imgImage.image = imageArray[indexPath.row]
        cell.backgroundColor = indexPath.item % 2 == 0 ? .red : .green

        return cell
    }

    func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumLineSpacingForSectionAt section: Int) -> CGFloat {
        return 0
    }

    func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {

        return CGSize(width: collectionView.frame.width, height: collectionView.frame.height)
    } 


    func scrollViewWillBeginDragging(_ scrollView: UIScrollView) {

        var page = Int(scrollView.contentOffset.x / scrollView.frame.size.width)

        if(page > currentPage)
        {
            thumbImage.isHidden = false
            thumbImage.image = #imageLiteral(resourceName: "thumbsup")
            print("RIGHT")
        } else {
            thumbImage.isHidden = false
            thumbImage.image = #imageLiteral(resourceName: "thumbsdown")
            print("LEFT")
        }

        currentPage = page

    }
}

1 Ответ

0 голосов
/ 27 сентября 2018

В вашей текущей реализации изображение большого пальца отображается только тогда, когда страница изменяется, что было бы, когда пролистывание выполняется на полпути.Я бы отделил страницу, изменяющуюся от показа большого пальца.Псевдокод:

if (currentOffset > lastOffset) {
    showThumbsUp()
}
else {
    showThumbsDown()
}

page = ...
if (page != currentPage) {
    changePage(page)
    lastOffset = currentOffset
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...