我正在使用JSQMessagesViewController库的项目中。有没有人成功地使打字指示器动画化了,如果可以,他们可以分享他们的方法吗?

谢谢!

最佳答案

我参加聚会很晚,但是因为这也花了我很多时间,而且我的帖子可以帮助其他人,所以我将列出我的工作解决方案。
我使用APNG(动画PNG,它可能具有透明背景)作为键入指示器,所以我使用APNGKit,它提供了一个名为APNGImageView的UIImageView子类。

  • 将Pod/Pods/JSQMessagesViewController/Resources中的JSQMessagesTypingIndicatorFooterView.xib复制到源文件夹,将其重命名为MyMessagesTypingIndicatorFooterView.xib(例如)
  • 创建一个名为MyMessagesTypingIndicatorFooterView的类,如下所示:
    class MyMessagesTypingIndicatorFooterView: JSQMessagesTypingIndicatorFooterView { @IBOutlet weak var animatedImageView: APNGImageView!
        override func draw(_ rect: CGRect) {
            super.draw(rect)
    
        }
    
        override func awakeFromNib() {
            super.awakeFromNib();
        }
    
        public override class func nib() -> UINib! {
            return UINib(nibName: "MyMessagesTypingIndicatorFooterView", bundle: Bundle.main)
        }
    
        override class func footerReuseIdentifier()->String{
            return "MyMessagesTypingIndicatorFooterView"
        }
    }
    
  • 将APNGImageView实例添加到MyMessagesTypingIndicatorFooterView.xib,引用自定义类MyMessagesTypingIndicatorFooterView。将引用 socket animatedImageView添加到MyMessagesTypingIndicatorFooterView类。
    JSQMessagesViewController动画输入指示器-LMLPHP
    JSQMessagesViewController动画输入指示器-LMLPHP
  • 在JSQMessagesViewController的子类中注册自定义页脚,并覆盖viewForSupplementaryElementOfKind
    class MyMessagesViewController: JSQMessagesViewController{ override func viewDidLoad() {
    self.collectionView.register(MyMessagesTypingIndicatorFooterView.nib(), forSupplementaryViewOfKind: UICollectionElementKindSectionFooter, withReuseIdentifier: "MyMessagesTypingIndicatorFooterView")}
    override func collectionView(_ collectionView: UICollectionView, viewForSupplementaryElementOfKind kind: String, at indexPath: IndexPath) -> UICollectionReusableView { if kind == UICollectionElementKindSectionFooter{ let footerView = collectionView.dequeueReusableSupplementaryView(ofKind: UICollectionElementKindSectionFooter, withReuseIdentifier: "MyMessagesTypingIndicatorFooterView", for: indexPath) as! MyMessagesTypingIndicatorFooterView //footerView let image = APNGImage(named: "typing1.png") footerView.animatedImageView.image = image footerView.animatedImageView.startAnimating() return footerView } return super.collectionView(collectionView, viewForSupplementaryElementOfKind: kind, at: indexPath) } }
  • 关于JSQMessagesViewController动画输入指示器,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32854347/

    10-14 23:14