Swift 2 - performBatchUpdates - 当 UICollectionView 框架内可见时,一个一个地为单元格设置动画
Posted
技术标签:
【中文标题】Swift 2 - performBatchUpdates - 当 UICollectionView 框架内可见时,一个一个地为单元格设置动画【英文标题】:Swift 2 - performBatchUpdates - Animate cell one by one when visibile inside the UICollectionView frame 【发布时间】:2015-11-04 12:43:54 【问题描述】:我正在尝试为框架中UICollectionView
可见的每个单元格设置动画。
每次滚动时,动画都会出现一个新单元格。
我在cellForItemAtIndexPath
中使用performBatchUpdates
执行此操作,但是,动画同时应用于所有单元格,而且速度非常快。 1秒的动画好像没认出来。
此外,我正在尝试找到在按下按钮但未成功时将动画应用于单元格的方法。
我使用的代码是:
override func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell
let Cell = collectionView.dequeueReusableCellWithReuseIdentifier("Cell", forIndexPath: indexPath) as! CellClass
self.collectionView?.performBatchUpdates(
Cell.layer.cornerRadius = 200
return
)
completed in
UIView.animateWithDuration(1, animations:
Cell.layer.cornerRadius = 0
)
Cell.playAnimationBtn.layer.setValue(indexPath.row, forKey: "indexPlayBtn")
@IBAction func actionGetAnimation(sender: UIButton)
let indexUser = (sender.layer.valueForKey("indexPlayBtn")) as! Int
//Cell selected do animation corners = 200
【问题讨论】:
【参考方案1】:您可以在将动画移动到willDisplayCell(_:cell:indexPath:)
时完成这项工作。每次将要显示新单元格时都会调用该方法。
您不能将UIView.animateWithDuration
用于图层属性。为此,您必须使用CABasicAnimation
。
如果您想在用户按下按钮时为单元格设置动画,您可以从下面的代码示例中调用animateCellAtIndexPath
。您必须知道单元格的 indexPath 才能这样做。在本例中,当用户选择单元格时,我调用此方法。
func collectionView(collectionView: UICollectionView, willDisplayCell cell: UICollectionViewCell, forItemAtIndexPath indexPath: NSIndexPath)
animateCell(cell)
func animateCell(cell: UICollectionViewCell)
let animation = CABasicAnimation(keyPath: "cornerRadius")
animation.fromValue = 200
cell.layer.cornerRadius = 0
animation.toValue = 0
animation.duration = 1
cell.layer.addAnimation(animation, forKey: animation.keyPath)
func animateCellAtIndexPath(indexPath: NSIndexPath)
guard let cell = collectionView.cellForItemAtIndexPath(indexPath) else return
animateCell(cell)
func collectionView(collectionView: UICollectionView, didSelectItemAtIndexPath indexPath: NSIndexPath)
animateCellAtIndexPath(indexPath)
【讨论】:
非常感谢!这对我有很大帮助。但是,我在写我的问题时感到困惑。有没有办法为按下的按钮而不是视图设置动画? 您要为 Button 的哪个属性设置动画? 您可以在自定义CellClass
中为按钮的 alpha 设置动画。要为 alpha 设置动画,您可以使用 UIView.animateWithDuration
谢谢,我找不到告诉 CellClass 按钮有动画的方法。如果我按所有这些开始动画
您连接到按钮的IBAction
必须在CellClass
中,而不是在视图控制器中。以上是关于Swift 2 - performBatchUpdates - 当 UICollectionView 框架内可见时,一个一个地为单元格设置动画的主要内容,如果未能解决你的问题,请参考以下文章
为 collectionview 链接 performBatchUpdates
UITableView 意外反弹 beginUpdates()/endUpdates()/performBatchUpdates()
UICollectionView performBatchUpdates:动画所有部分