// // Created by Jesse Squires // http://www.jessesquires.com // // // Documentation // http://cocoadocs.org/docsets/JSQMessagesViewController // // // GitHub // https://github.com/jessesquires/JSQMessagesViewController // // // License // Copyright (c) 2014 Jesse Squires // Released under an MIT license: http://opensource.org/licenses/MIT // #import "JSQMessagesTypingIndicatorFooterView.h" #import "JSQMessagesBubbleImageFactory.h" #import "UIImage+JSQMessages.h" const CGFloat kJSQMessagesTypingIndicatorFooterViewHeight = 46.0f; @interface JSQMessagesTypingIndicatorFooterView () @property (weak, nonatomic) IBOutlet UIImageView *bubbleImageView; @property (weak, nonatomic) IBOutlet NSLayoutConstraint *bubbleImageViewRightHorizontalConstraint; @property (weak, nonatomic) IBOutlet UIImageView *typingIndicatorImageView; @property (weak, nonatomic) IBOutlet NSLayoutConstraint *typingIndicatorImageViewRightHorizontalConstraint; @end @implementation JSQMessagesTypingIndicatorFooterView #pragma mark - Class methods + (UINib *)nib { return [UINib nibWithNibName:NSStringFromClass([JSQMessagesTypingIndicatorFooterView class]) bundle:[NSBundle mainBundle]]; } + (NSString *)footerReuseIdentifier { return NSStringFromClass([JSQMessagesTypingIndicatorFooterView class]); } #pragma mark - Initialization - (void)awakeFromNib { [super awakeFromNib]; [self setTranslatesAutoresizingMaskIntoConstraints:NO]; self.backgroundColor = [UIColor clearColor]; self.userInteractionEnabled = NO; self.typingIndicatorImageView.contentMode = UIViewContentModeScaleAspectFit; } - (void)dealloc { _bubbleImageView = nil; _typingIndicatorImageView = nil; } #pragma mark - Reusable view - (void)setBackgroundColor:(UIColor *)backgroundColor { [super setBackgroundColor:backgroundColor]; self.bubbleImageView.backgroundColor = backgroundColor; } #pragma mark - Typing indicator - (void)configureWithEllipsisColor:(UIColor *)ellipsisColor messageBubbleColor:(UIColor *)messageBubbleColor shouldDisplayOnLeft:(BOOL)shouldDisplayOnLeft forCollectionView:(UICollectionView *)collectionView { NSParameterAssert(ellipsisColor != nil); NSParameterAssert(messageBubbleColor != nil); NSParameterAssert(collectionView != nil); CGFloat bubbleMarginMinimumSpacing = 6.0f; CGFloat indicatorMarginMinimumSpacing = 26.0f; JSQMessagesBubbleImageFactory *bubbleImageFactory = [[JSQMessagesBubbleImageFactory alloc] init]; if (shouldDisplayOnLeft) { self.bubbleImageView.image = [bubbleImageFactory incomingMessagesBubbleImageWithColor:messageBubbleColor].messageBubbleImage; CGFloat collectionViewWidth = CGRectGetWidth(collectionView.frame); CGFloat bubbleWidth = CGRectGetWidth(self.bubbleImageView.frame); CGFloat indicatorWidth = CGRectGetWidth(self.typingIndicatorImageView.frame); CGFloat bubbleMarginMaximumSpacing = collectionViewWidth - bubbleWidth - bubbleMarginMinimumSpacing; CGFloat indicatorMarginMaximumSpacing = collectionViewWidth - indicatorWidth - indicatorMarginMinimumSpacing; self.bubbleImageViewRightHorizontalConstraint.constant = bubbleMarginMaximumSpacing; self.typingIndicatorImageViewRightHorizontalConstraint.constant = indicatorMarginMaximumSpacing; } else { self.bubbleImageView.image = [bubbleImageFactory outgoingMessagesBubbleImageWithColor:messageBubbleColor].messageBubbleImage; self.bubbleImageViewRightHorizontalConstraint.constant = bubbleMarginMinimumSpacing; self.typingIndicatorImageViewRightHorizontalConstraint.constant = indicatorMarginMinimumSpacing; } [self setNeedsUpdateConstraints]; self.typingIndicatorImageView.image = [[UIImage jsq_defaultTypingIndicatorImage] jsq_imageMaskedWithColor:ellipsisColor]; } @end