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 № 1Bę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.
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()
}
}