изображение в представлении прокрутки внутри заголовка представления коллекции не обнаруживает действие изображения (щелкните) - PullRequest
0 голосов
/ 11 января 2019

Я создал горизонтальный вид прокрутки внутри заголовка представления коллекции Ui. Я добавил туда два изображения, каждое изображение имеет действие после касания. И это действие переместит экран на другой контроллер, для которого я использовал контроллер push-навигации. Но я обнаружил, что мое изображение не прокручивается от руки и не принимает жест. Я также использовал таймер для перемещения изображений, и он работает. Прокрутка и постукивание не работает. Любое предложение. Спасибо

Здесь мой заголовок используется внутри контроллера

    func collectionView(_ collectionView: UICollectionView, viewForSupplementaryElementOfKind kind: String, at indexPath: IndexPath) -> UICollectionReusableView {

    let header = collectionView.dequeueReusableSupplementaryView(ofKind: kind, withReuseIdentifier: "HomeHeaderCell", for: indexPath) as! HomeHeaderCell
    header.isUserInteractionEnabled = true
    header.layoutChange()
    header.setUpHorizon()
    header.scrollView.isScrollEnabled = true

    if kind == UICollectionElementKindSectionHeader {
        return header
    }

    return UICollectionReusableView()

}

Это код ячейки моего заголовка

import UIKit

class HomeHeaderCell: UICollectionViewCell,UIScrollViewDelegate {

    @IBOutlet weak var headerLabel: UILabel!

    @IBOutlet var pageControl: UIPageControl!
    @IBOutlet var scrollView: UIScrollView!

    @IBOutlet weak var view: UIView!

    var images: [String] = ["bannerrevised1", "bannerrevised1"]
    var slideToX:CGFloat = 0.0
    var gameTimer: Timer!
    var pageWidth: CGFloat = 0.0
    let loyalityCheck = TCUtilityManager.retrieve(fromUserDefaults: "USERTYPE")

    override func awakeFromNib() {

        scrollView.delegate = self

        pageControl.currentPage = 0
        view.bringSubview(toFront: pageControl)

    }

    func setUpHorizon() {

        //TODO: Set Horizontal Pages
        pageControl.numberOfPages = 2

        // 1 set frame scale
        scrollView.frame = CGRect(x: 0, y: 0, width: view.frame.width , height: view.frame.height )
        let scrollViewWidth: CGFloat = scrollView.frame.width
        let scrollViewHeight: CGFloat = scrollView.frame.height

        //Images will display accordingly User type
        let imgOne = UIImageView(frame: CGRect(x: 0, y: 0, width: scrollViewWidth, height: scrollViewHeight))
        imgOne.image = loyalityCheck == "LOYALITY" ? #imageLiteral(resourceName: "App banner_650x180px_2.jpg") : #imageLiteral(resourceName: "App banner_650x180px_1.jpg")

        let imgTwo = UIImageView(frame: CGRect(x: scrollViewWidth, y: 0, width: scrollViewWidth, height: scrollViewHeight))
        imgTwo.image = #imageLiteral(resourceName: "App banner_650x180px.jpg")

        let tapGestureRecognizer1 = UITapGestureRecognizer(target: self, action: #selector(imageTapped1(tapGestureRecognizer:)))
        imgOne.isUserInteractionEnabled = true
        tapGestureRecognizer1.delegate = self.view as? UIGestureRecognizerDelegate
        tapGestureRecognizer1.cancelsTouchesInView = false
        imgOne.addGestureRecognizer(tapGestureRecognizer1)

        let tapGestureRecognizer2 = UITapGestureRecognizer(target: self, action: #selector(imageTapped2(tapGestureRecognizer:)))
        imgTwo.isUserInteractionEnabled = true
        tapGestureRecognizer2.delegate = self as? UIGestureRecognizerDelegate
        tapGestureRecognizer2.cancelsTouchesInView = false
        imgTwo.addGestureRecognizer(tapGestureRecognizer2)

        scrollView.addSubview(imgOne)
        scrollView.addSubview(imgTwo)

        //        layoutChange()

        scrollView.contentSize = CGSize(width: scrollView.frame.width * 2, height: scrollView.frame.height)
        scrollView.delegate = self
        pageControl.currentPage = 0

        let currentPage: CGFloat = round(scrollView.contentOffset.x/view.frame.width)
        pageControl.currentPage = Int(currentPage)

        //Timer to move screen automatically after some duration
        Timer.scheduledTimer(timeInterval: 6.0 , target: self, selector: #selector(self.moveToNextPage), userInfo: nil, repeats: true)


    }

    //Move to next screen
    @objc func moveToNextPage() {

        pageWidth = scrollView.frame.width
        let maxWidth: CGFloat = pageWidth * CGFloat(images.count)
        let contentOffset: CGFloat = scrollView.contentOffset.x

        slideToX = contentOffset + pageWidth

        if contentOffset + pageWidth == maxWidth {

            slideToX = 0
        }

        gameTimer = Timer.scheduledTimer(timeInterval: 3, target: self, selector: #selector(runTimedCode), userInfo: nil, repeats: true)
    }


    @objc func runTimedCode() {
        self.scrollView.scrollRectToVisible(CGRect(x: slideToX, y: 0, width: pageWidth, height: self.scrollView.frame.height), animated: false)
    }

    //Image action
    @objc func imageTapped1(tapGestureRecognizer: UITapGestureRecognizer)
    {

        let storyBoard = UIStoryboard(name: "Main", bundle: nil)
        if let detailVC = storyBoard.instantiateViewController(withIdentifier: "TCWalletVC") as? TCWalletVC {
            //            self.navigationController?.pushViewController(detailVC, animated: true)
        }

    }

    @objc func imageTapped2(tapGestureRecognizer: UITapGestureRecognizer)
    {
        let storyBoard = UIStoryboard(name: "Main", bundle: nil)
        if let detailVC = storyBoard.instantiateViewController(withIdentifier: "TCOffersVC") as? TCOffersVC {
            //            self.navigationController?.pushViewController(detailVC, animated: true)
        }

    }

    func scrollViewDidScroll(_ scrollView: UIScrollView) {
        let pageIndex = round(scrollView.contentOffset.x/view.frame.width)
        pageControl.currentPage = Int(pageIndex)
    }

    //Updation of screen
    func layoutChange() {
        self.view.layoutIfNeeded()
        self.view.setNeedsUpdateConstraints()
        self.scrollView.layoutIfNeeded()
        self.scrollView.setNeedsUpdateConstraints()
    }

}
...