适用于iOS的Google Primer应用程序具有表格视图滚动效果,滚动时单元格彼此堆叠。Primer应用程序:如果在他们的页面上滚动,您可能会看到效果...我正在谈论的效果在Primer特色课程中。我正在尝试使用tableview重现它。
我尝试在viewdidscroll事件上播放单元格的框架。我可以使用它,但是以某种方式向上移动时,它会变得非常跳动/抖动。另外,如果发生跳动,则框架会错误地偏移。我只能在单元格内部的标签框架上执行此操作。我的单元格真的很大(超过一半的屏幕)。
如何消除跳跃/混蛋?如何设置容器视图位置而不是标签位置的动画?
scrollViewDidScroll上带有标签的当前动画:
override func scrollViewDidScroll(scrollView: UIScrollView) {
if (self.tableView.contentOffset.y < 0) { return }
let offsetYDifference = oldYOffset - self.tableView.contentOffset.y
oldYOffset = self.tableView.contentOffset.y
let cell = self.tableView.visibleCells.first!
var newOriginY = (cell.textLabel?.frame.origin.y)! - offsetYDifference
if (newOriginY < 0) { //Cells get reused.
newOriginY = newOriginY + cell.frame.height
}
cell.textLabel?.frame = CGRect(x: (cell.textLabel?.frame.origin.x)!,
y: newOriginY,
width: (cell.textLabel?.frame.width)!,
height: (cell.textLabel?.frame.height)!)
}
在情节提要中将启用分页的自定义类分页行为设置为关闭:
override func scrollViewWillEndDragging(scrollView: UIScrollView, withVelocity velocity: CGPoint, targetContentOffset: UnsafeMutablePointer<CGPoint>) {
let offsety = targetContentOffset.memory.y
var smallestCellDiffToContentOffset = abs(offsety - (self.tableView.visibleCells.first?.frame.origin.y)!)
var closestCellOrigin = self.tableView.visibleCells.first?.frame.origin.y
self.tableView.visibleCells.forEach { (cell) -> () in
if (abs(offsety - cell.frame.origin.y) <= smallestCellDiffToContentOffset) {
smallestCellDiffToContentOffset = abs(offsety - cell.frame.origin.y)
closestCellOrigin = cell.frame.origin.y
}
}
targetContentOffset.memory.y = closestCellOrigin!
}
我是一个快速入门的开发人员,对于该怎么做我一无所知。提前致谢。
本质上,您所看到的是UITableView
正在抵制创建此动画的努力。正确的是,更改单元格的框架应留给tableview本身。
相反,您需要的是UICollectionView
带有自定义布局对象的控件,该对象可以控制单元格的位置。这将是相当多的工作,但是可以使用UITableView不提供的更精细的粒度控制。
请查看本教程,以获取有关集合视图的自定义布局的简要入门。我建议您同时观看2012 WWDC视频“高级馆藏视图”和“构建自定义布局”。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句