当我以编程方式滚动到项目时,我只是尝试制作自定义动画。因此,当我不编写动画并使用默认的单元格时不会消失,但是当我在UIView.animate func中放置scrolltoItem func时,最后一个单元格首先消失,然后scrollToItem动画。 在最上面的collectionView中的第二张图片中,独立游戏单元格之前的位置首先消失,然后collectionView从独立游戏单元格滚动到下一个
为什么会发生这种行为?为什么当我没有按照自己的方式有目的地制作动画,并且只使用animated = true func调用scrollToItem时,什么都没有消除?如果有人确实知道细胞会发生什么,请给我一个线索。
UIView.animate(withDuration: 10, delay: 0, options: .curveEaseInOut, animations: {
self.appsCollectionView.scrollToItem(at: IndexPath(item: self.actualNumberOfTheCell, section: 0), at: .centeredHorizontally, animated: false)
}, completion: nil)
答案 0 :(得分:0)
我认为你应该用self.view.layoutIfNeeded()
self.appsCollectionView.scrollToItem(at: IndexPath(item: self.actualNumberOfTheCell, section: 0), at: .centeredHorizontally, animated: false)
UIView.animate(withDuration: 10, delay: 0, options: .curveEaseInOut, animations: {
self.view.layoutIfNeeded()
}, completion: nil)
希望它能运作
答案 1 :(得分:0)
由于突然滚动,您重复使用的单元格可能会重叠。最新的单元格可能没有正确地出列,并且可能使用先前单元格的内容进行初始化 - >这很可能是在滚动过程中没有正确显示的空单元格。
尝试使用以下方法重置您的手机内容: {/ 1}}在你手机的控制器内。
您应该在此处将UI重置为默认状态。
不要忘记为您的单元格调用UI显示/设置方法,该方法应显示您的UI元素。
希望它有所帮助!
答案 2 :(得分:0)
我认为问题是由于collectionView太早回收单元格所致,因为您正在使用带有animation = false的scrollToItem。
我试图将动画分成几个较小的步骤,虽然可以,但是滚动并不流畅。这是代码:
// self is extended from UICollectionView
scrollTo(x: 100, duration: 0.6, count: 4) { (finished) in
}
private func scrollTo(x:CGFloat, duration:TimeInterval, count:Int, completion:@escaping (Bool)->Void)
{
let xOffset = (x - contentOffset.x)/CGFloat(count)
let durationPart = duration/TimeInterval(count)
scrollToPart(xOffset: xOffset, duration: durationPart, count: count, completion: completion)
}
private func scrollToPart(xOffset:CGFloat, duration:TimeInterval, count:Int, completion:@escaping (Bool)->Void)
{
UIView.animate(withDuration: duration, animations: {
self.contentOffset.x += xOffset
}) { (finished) in
if count <= 1
{
completion(finished)
}
else
{
self.scrollToPart(xOffset: xOffset, duration: duration, count: count-1, completion: completion)
}
}
}
我最后使用了scrollToItem和animation = true。