122 lines
3.9 KiB
Objective-C
122 lines
3.9 KiB
Objective-C
//
|
|
// 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
|