iOS版Google Primer應用程序具有表格視圖滾動效果,其中滾動時單元彼此堆疊在一起。 Primer application:如果您在他們的頁面上滾動,您可以看到效果......我所說的效果在Primer的特色課程中。我想用tableview來重現它。自定義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)!)
}
Custom paging-like behavior分頁啓用設置爲關上的腳本:
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!
}
我是初學者迅速developper我真的很無能在做什麼。提前致謝。
很好的答案! Loooks就像一個很好的解決方案。這會給我更多的控制權。謝謝。沒有想過。 – AlexB
沒問題。或者,如果您希望完全模仿Primer應用程序,最好的辦法是創建自己的導航控制器,該控制器使用[UIViewController containment](https://www.objc.io/issues/1-view-controllers/遏制 - 視圖 - 控制器/)。在UITableViewCell's或UICollectionViewCell's中有UIViewControllers可能會讓人毛骨悚然,並且通常不鼓勵。對於普通視圖來說,沒關係。 –