uiimageview 动画在用户触摸屏幕时停止
Posted
技术标签:
【中文标题】uiimageview 动画在用户触摸屏幕时停止【英文标题】:uiimageview animation stops when user touches screen 【发布时间】:2015-01-12 14:23:52 【问题描述】:我有一个带有动画图像的 UImageview。 我在代码中添加 uiimageview 及其 CollectionViewCell 的一部分 当用户触摸单元格时动画停止,为什么会发生这种情况?
代码:
var images: [UIImage] = []
for i in 0...10
images.append(UIImage(named: "image\(i)"))
let i = UIImageView(frame: CGRect(x: xPos, y: yPos, width: 200, height: 200))
i.animationImages = images
i.animationDuration = 0.5
i.startAnimating()
i.contentMode = UIViewContentMode.Center
i.userInteractionEnabled = false
self.addSubview(i)
【问题讨论】:
动画期间禁用collectionView用户交互怎么样? 谢谢,我禁用了 collectionView 单元格的用户交互。现在可以了。 【参考方案1】:如果您不想进行任何交互,那么以下将是解决此问题的最快方法:
collectionView.allowsSelection = false
【讨论】:
你让我开心!谢谢!【参考方案2】:在您的自定义集合视图单元类中,编写以下方法来修复问题
func setSelected(selected:Bool)
func setHighlighted(higlighted:Bool)
【讨论】:
【参考方案3】:Swift 4.0 版本:
override open var isSelected: Bool
set
get
return super.isSelected
override open var isHighlighted: Bool
set
get
return super.isHighlighted
【讨论】:
如何使用?【参考方案4】:用空的 setter 覆盖 isSelected、isHighlighted 可以解决这个问题,但是会丢失这两个要设置的属性。我可以通过在 UICollectionViewDelegate 中的 didSelectItemAt 处调用 imageView.startAnimating() 来解决这个问题。
func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath)
let item = items[indexPath.item]
if item.hasGIF
let cell = collectionView.cellForItem(at: indexPath) as! ItemCell
cell.imageView.startAnimating()
func collectionView(_ collectionView: UICollectionView, didDeselectItemAt indexPath: IndexPath)
let item = items[indexPath.item]
if item.hasGIF
let cell = collectionView.cellForItem(at: indexPath) as! ItemCell
cell.imageView.startAnimating()
【讨论】:
【参考方案5】:就我而言,我无法禁用选择或使用此处之前发布的任何解决方案。我不需要突出显示单元格,因此我通过下面的委托方法将其禁用以返回 false,从而阻止调用 stopAnimating() 方法。这是我在 UICollectionViewCell 中使用 KingFisher 的 AnimatedImageView 时遇到的问题。
func collectionView(_ collectionView: UICollectionView, shouldHighlightItemAt indexPath: IndexPath) -> Bool
return false
用于动画的 UIImage 对象数组。 var highlightAnimationImages: [UIImage]?突出显示视图时用于动画的 UIImage 对象数组。遍历一个图像周期所需的时间。
【讨论】:
【参考方案6】:在TableView中使用下面的代码可以解决touche cancel, touche move等等
- (void)tableView:(UITableView *)tableView didUnhighlightRowAtIndexPath:(NSIndexPath *)indexPath
[cell startAnimation];
【讨论】:
以上是关于uiimageview 动画在用户触摸屏幕时停止的主要内容,如果未能解决你的问题,请参考以下文章