在桌面视图Cell Swift 4中的iOS滚动视差效果

时间:2018-04-19 11:06:08

标签: ios swift uitableview uiscrollview

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

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

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
}

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

enter image description here

1 个答案:

答案 0 :(得分:0)

我建议您查看以下库:

他们在TableViewCell

中实施了视差观点
  1. https://github.com/marty-suzuki/SAParallaxViewControllerSwift
  2. 希望它有所帮助。