/ / JSQMessagesViewController animowany wskaźnik pisania - jsqmessagesviewcontroller

JSQMessagesViewController animowany wskaźnik pisania - jsqmessagesviewcontroller

Pracuję nad projektem, który korzysta z biblioteki JSQMessagesViewController. Czy komuś udało się animować wskaźnik pisania, a jeśli tak, czy może podzielić się swoim podejściem?

Dzięki!

Odpowiedzi:

0 dla odpowiedzi № 1

Będziesz chciał zajrzeć do JSQTypingIndicatorFooterView oto dokumentacja. http://cocoadocs.org/docsets/JSQMessagesViewController/7.2.0/Classes/JSQMessagesTypingIndicatorFooterView.html

Możesz ustawić ellipsisColor

messageBubbleColor kolor bąbelka.

shouldDisplayOnLeft zdecydować, czy ma być po lewej, czy po prawej stronie.

collectionView widok kolekcji, w którym powinien się pojawić.


0 dla odpowiedzi nr 2

Jestem spóźniony na imprezę, ale ponieważ to też bioręmnie dużo czasu, a mój post mógłby pomóc innym, więc wymienię moje działające rozwiązanie. Używam APNG (animowany PNG, który może mieć przezroczyste tło) jako wskaźnik pisania, więc używam APNGKit, który zapewnia podklasę UIImageView o nazwie APNGImageView

  • Skopiuj JSQMessagesTypingIndicatorFooterView.xib z Pods / Pods / JSQMessagesViewController / Resources do folderu źródłowego, zmień jego nazwę na MyMessagesTypingIndicatorFooterView.xib (na przykład)

  • Utwórz klasę o nazwie MyMessagesTypingIndicatorFooterView w następujący sposób:

    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"
    }
    }
    </ pre>
    
    

    </ code>

  • Dodaj instancję APNGImageView doMyMessagesTypingIndicatorFooterView.xib, odwołanie do klasy niestandardowej MyMessagesTypingIndicatorFooterView. Dodaj gniazdo referencyjne animatedImageView do klasy MyMessagesTypingIndicatorFooterView. wprowadź opis obrazu tutaj wprowadź opis obrazu tutaj

  • Zarejestruj stopkę niestandardową w podklasie JSQMessagesViewController i zastąp 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) } }


-1 dla odpowiedzi nr 3

Użyłem do tego Firebase:

 var userIsTypingRef: FIRDatabaseReference!
fileprivate var localTyping = false
var isTyping: Bool {
get {
return localTyping
}
set {
localTyping = newValue
userIsTypingRef.setValue(newValue)
}
}

Następnie dodałem to do mojej bazy kodu:

 fileprivate func observeMessages() {
let messagesQuery = messageRef.queryLimited(toLast: 25)
messagesQuery.observe(.childAdded) { (snapshot: FIRDataSnapshot!) in
if let value = snapshot.value as? [String:AnyObject], let id = value["senderId"] as? String, let text = value["text"] as? String {
self.addMessage(id, text: text)
self.finishReceivingMessage()
}
}