Я создал горизонтальный вид прокрутки внутри заголовка представления коллекции 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()
}
}