我在CollectionView
内有多个TableView
,并且想要根据每个CollectionView
中的数据计数分别实现自动滚动
此代码对于单个CollectionView正常工作
我的UITableViewCell
代码在这里
class PromotionalOfferCell: UITableViewCell,UICollectionViewDelegate,UICollectionViewDataSource{
@IBOutlet weak var collVwPromotionalOffer: UICollectionView!
var x = 1
var scroll_timer : Timer?
var data_obj = [PromotionalOfferData]() {
didSet {
print(data_obj)
}
}
override func awakeFromNib() {
super.awakeFromNib()
if collVwPromotionalOffer != nil{
self.collVwPromotionalOffer.dataSource = self
self.collVwPromotionalOffer.delegate = self
}
}
func setTimer() {
scroll_timer = Timer.scheduledTimer(timeInterval: 3.0, target: self, selector: #selector(self.autoScroll), userInfo: nil, repeats: true)
}
@objc func autoScroll() {
if self.x < self.data_obj.count {
let indexPath = IndexPath(item: x, section: 0)
self.collVwPromotionalOffer.scrollToItem(at: indexPath, at: .centeredHorizontally, animated: true)
self.x = self.x + 1
} else {
self.x = 0
self.collVwPromotionalOffer.scrollToItem(at: IndexPath(item: 0, section: 0), at: .centeredHorizontally, animated: true)
}
}
}
// CollectionView Delegate & DataSource
func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
if data_obj.count > 0{
return data_obj.count
}
return 0
}
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "ImageCell", for: indexPath) as? ImageCell
cell?.imgView.sd_setImage(with:URL(string: data_obj[indexPath.row].image!), placeholderImage: UIImage(named: "cod_logo"), options: [.highPriority]) { (image, error, cashtype, url) in }
return cell!
}
UITableView
代表人
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
if tableViewItems.count > 0{
return self.tableViewItems.count
}
return 0
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
if let Promotional_Item = tableViewItems[indexPath.row] as? [PromotionalOfferData]{
let cell = tableView.dequeueReusableCell(withIdentifier: "PromotionalOfferCell", for: indexPath) as! PromotionalOfferCell
cell.data_obj = Promotional_Item
cell.collVwPromotionalOffer.reloadData()
if cell.scroll_timer != nil {
cell.scroll_timer!.invalidate()
cell.scroll_timer = nil
}
if Promotional_Item.count > 1{
cell.setTimer()
}
return cell
}
}
我的输出就是这样
问题是我在Log中打印并意识到计时器已被调用 每个
不止一次CollectionView
由于此,应用程序的内存大小将继续增加,我 已经
invalidate
个计时器
有人可以告诉我我错了吗?预先感谢
答案 0 :(得分:0)
您好,Nikonj而不是使用多个计时器,而是使用一个计时器并处理诸如在其选择器中滚动的操作,而不是针对不同的单元格进行滚动,从而导致每个表格视图单元格计时器间隔都相同,您也可以尝试在willdisplay上执行此操作,并在willEndDisplaying中使之无效!(尽管我不喜欢很多计时器)。希望能有所帮助!