【问题标题】:iOS Scrolling Parallax Effect in Table View Cell Swift 4表视图单元格 Swift 4 中的 iOS 滚动视差效果
【发布时间】:2018-04-19 11:06:08
【问题描述】:

我在项目的表格视图单元格中创建了滚动视差效果,但滚动时出现了一些冻结。

我在自定义表格视图单元格中的代码:

class newsTableViewCell: UITableViewCell {

    @IBOutlet weak var imageNews: UIImageView!
    @IBOutlet weak var titleLable: UILabel!
    @IBOutlet weak var imageHeight: NSLayoutConstraint!
    @IBOutlet weak var imageTop: NSLayoutConstraint!

    override func awakeFromNib() {
        super.awakeFromNib()
        imageNews.clipsToBounds = true
    }
}

我的主视图控制器中的代码:

var paralaxOfSetSpeed: CGFloat = 70
var cellHeignt: CGFloat = 170

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

    let cell = tableView.dequeueReusableCell(withIdentifier: "cell") as! newsTableViewCell

    let good = data[indexPath.row]

    cell.titleLable.text = (good["title"] as! String)
    cell.imageHeight.constant = paralaxImageHeight
    cell.imageTop.constant = paralaxOfSet(newOfSetY: tableView.contentOffset.y, cell: cell)

    let newsImage = good["image"] as! PFFile

    newsImage.getDataInBackground{ (imageData, error) in
        if imageData != nil {
            let image = UIImage(data: imageData!)
            cell.imageNews.image = image
        } else {
            print(error ?? "getDataInBackground error")
        }
    }

    return cell
}

func paralaxOfSet(newOfSetY: CGFloat, cell: UITableViewCell) -> CGFloat {
    return (newOfSetY - cell.frame.origin.y) / paralaxImageHeight * paralaxOfSetSpeed
}

func scrollViewDidScroll(_ scrollView: UIScrollView) {
    let ofSetY = tableView.contentOffset.y
    for cell in tableView.visibleCells as! [newsTableViewCell] {
        cell.imageTop.constant = paralaxOfSet(newOfSetY: tableView.contentOffset.y, cell: cell)
    }
}

var paralaxImageHeight: CGFloat {
    let maxOffSet = (sqrt(pow(cellHeignt, 2) + 4 * paralaxOfSetSpeed * self.tableView.frame.height ) - cellHeignt) / 1.5
    return maxOffSet + self.cellHeignt
}

这是我的代码,主要问题是滚动,因为它不流畅。 更新: 所以最后,我想得到这样的东西:

【问题讨论】:

  • 您好。 scrollViewDidScroll 被调用了多少次(也许添加控制台日志作为快速而肮脏的检查)?我怀疑问题在于每次滚动时您都在遍历整个集合视图。

标签: ios swift uitableview uiscrollview


【解决方案1】:

我建议您查看以下库:

他们在TableViewCell中实现了视差视图

  1. https://github.com/marty-suzuki/SAParallaxViewControllerSwift

希望对你有帮助。

【讨论】:

  • 不,我在写问题之前尝试过这个
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-16
  • 2016-11-23
  • 1970-01-01
  • 2018-02-26
  • 1970-01-01
相关资源
最近更新 更多