From 7b02207537d35bfa1714bf8beafc921f717d100a Mon Sep 17 00:00:00 2001
From: 单军华
Date: Wed, 11 Jul 2018 10:47:42 +0800
Subject: [PATCH] 首次上传

---
 screendisplay/Pods/EaseUI/EaseUI/EMUIKit/Views/conversation/MessageCell/EaseBaseMessageCell.m |  373 +++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 373 insertions(+), 0 deletions(-)

diff --git a/screendisplay/Pods/EaseUI/EaseUI/EMUIKit/Views/conversation/MessageCell/EaseBaseMessageCell.m b/screendisplay/Pods/EaseUI/EaseUI/EMUIKit/Views/conversation/MessageCell/EaseBaseMessageCell.m
new file mode 100755
index 0000000..1d3342c
--- /dev/null
+++ b/screendisplay/Pods/EaseUI/EaseUI/EMUIKit/Views/conversation/MessageCell/EaseBaseMessageCell.m
@@ -0,0 +1,373 @@
+/************************************************************
+ *  * Hyphenate CONFIDENTIAL
+ * __________________
+ * Copyright (C) 2016 Hyphenate Inc. All rights reserved.
+ *
+ * NOTICE: All information contained herein is, and remains
+ * the property of Hyphenate Inc.
+ * Dissemination of this information or reproduction of this material
+ * is strictly forbidden unless prior written permission is obtained
+ * from Hyphenate Inc.
+ */
+
+#import "EaseBaseMessageCell.h"
+
+#import "UIImageView+WebCache.h"
+
+@interface EaseBaseMessageCell()
+
+@property (strong, nonatomic) UILabel *nameLabel;
+
+@property (nonatomic) NSLayoutConstraint *avatarWidthConstraint;
+@property (nonatomic) NSLayoutConstraint *nameHeightConstraint;
+
+@property (nonatomic) NSLayoutConstraint *bubbleWithAvatarRightConstraint;
+@property (nonatomic) NSLayoutConstraint *bubbleWithoutAvatarRightConstraint;
+
+@property (nonatomic) NSLayoutConstraint *bubbleWithNameTopConstraint;
+@property (nonatomic) NSLayoutConstraint *bubbleWithoutNameTopConstraint;
+@property (nonatomic) NSLayoutConstraint *bubbleWithImageConstraint;
+
+@end
+
+@implementation EaseBaseMessageCell
+
+@synthesize nameLabel = _nameLabel;
+
++ (void)initialize
+{
+    // UIAppearance Proxy Defaults
+    EaseBaseMessageCell *cell = [self appearance];
+    cell.avatarSize = 30;
+    cell.avatarCornerRadius = 0;
+    
+    cell.messageNameColor = [UIColor grayColor];
+    cell.messageNameFont = [UIFont systemFontOfSize:10];
+    cell.messageNameHeight = 15;
+    if ([UIDevice currentDevice].systemVersion.floatValue >= 8.0) {
+        cell.messageNameIsHidden = NO;
+    }
+    
+//    cell.bubbleMargin = UIEdgeInsetsMake(8, 15, 8, 10);
+}
+
+- (instancetype)initWithStyle:(UITableViewCellStyle)style
+              reuseIdentifier:(NSString *)reuseIdentifier
+                        model:(id<IMessageModel>)model
+{
+    self = [super initWithStyle:style reuseIdentifier:reuseIdentifier model:model];
+    if (self) {
+        self.backgroundColor = [UIColor clearColor];
+        
+        _nameLabel = [[UILabel alloc] init];
+        _nameLabel.translatesAutoresizingMaskIntoConstraints = NO;
+        _nameLabel.backgroundColor = [UIColor clearColor];
+        _nameLabel.font = _messageNameFont;
+        _nameLabel.textColor = _messageNameColor;
+        [self.contentView addSubview:_nameLabel];
+        
+        [self configureLayoutConstraintsWithModel:model];
+        
+        if ([UIDevice currentDevice].systemVersion.floatValue == 7.0) {
+            self.messageNameHeight = 15;
+        }
+    }
+    
+    return self;
+}
+
+- (void)layoutSubviews
+{
+    [super layoutSubviews];
+    _bubbleView.backgroundImageView.image = self.model.isSender ? self.sendBubbleBackgroundImage : self.recvBubbleBackgroundImage;
+    switch (self.model.bodyType) {
+        case EMMessageBodyTypeText:
+        {
+        }
+            break;
+        case EMMessageBodyTypeImage:
+        {
+            CGSize retSize = self.model.thumbnailImageSize;
+            if (retSize.width == 0 || retSize.height == 0) {
+                retSize.width = kEMMessageImageSizeWidth;
+                retSize.height = kEMMessageImageSizeHeight;
+            }
+            else if (retSize.width > retSize.height) {
+                CGFloat height =  kEMMessageImageSizeWidth / retSize.width * retSize.height;
+                retSize.height = height;
+                retSize.width = kEMMessageImageSizeWidth;
+            }
+            else {
+                CGFloat width = kEMMessageImageSizeHeight / retSize.height * retSize.width;
+                retSize.width = width;
+                retSize.height = kEMMessageImageSizeHeight;
+            }
+            [self removeConstraint:self.bubbleWithImageConstraint];
+            
+            CGFloat margin = [EaseMessageCell appearance].leftBubbleMargin.left + [EaseMessageCell appearance].leftBubbleMargin.right;
+            self.bubbleWithImageConstraint = [NSLayoutConstraint constraintWithItem:self.bubbleView attribute:NSLayoutAttributeWidth relatedBy:NSLayoutRelationEqual toItem:nil attribute:NSLayoutAttributeNotAnAttribute multiplier:1.0 constant:retSize.width + margin];
+            
+            [self addConstraint:self.bubbleWithImageConstraint];
+        }
+            break;
+        case EMMessageBodyTypeLocation:
+        {
+        }
+            break;
+        case EMMessageBodyTypeVoice:
+        {
+            [self removeConstraint:self.bubbleWithImageConstraint];
+            self.bubbleWithImageConstraint = [NSLayoutConstraint constraintWithItem:self.bubbleView attribute:NSLayoutAttributeWidth relatedBy:NSLayoutRelationEqual toItem:nil attribute:NSLayoutAttributeNotAnAttribute multiplier:1.0 constant:[EaseMessageCell appearance].voiceCellWidth];
+            [self addConstraint:self.bubbleWithImageConstraint];
+        }
+            break;
+        case EMMessageBodyTypeVideo:
+        {
+        }
+            break;
+        case EMMessageBodyTypeFile:
+        {
+        }
+            break;
+        default:
+            break;
+    }
+}
+
+/*!
+ @method
+ @brief ���������������������������������������������������������������������
+ @discussion
+ @param model   ������������
+ @result
+ */
+- (void)configureLayoutConstraintsWithModel:(id<IMessageModel>)model
+{
+    if (model.isSender) {
+        [self configureSendLayoutConstraints];
+    } else {
+        [self configureRecvLayoutConstraints];
+    }
+}
+
+/*!
+ @method
+ @brief ���������������������
+ @discussion  ������������������������������������������������������������������cell���������������������
+ @result
+ */
+- (void)configureSendLayoutConstraints
+{
+    //avatar view
+    [self addConstraint:[NSLayoutConstraint constraintWithItem:self.avatarView attribute:NSLayoutAttributeTop relatedBy:NSLayoutRelationEqual toItem:self.contentView attribute:NSLayoutAttributeTop multiplier:1.0 constant:EaseMessageCellPadding]];
+    
+    [self addConstraint:[NSLayoutConstraint constraintWithItem:self.avatarView attribute:NSLayoutAttributeRight relatedBy:NSLayoutRelationEqual toItem:self.contentView attribute:NSLayoutAttributeRight multiplier:1.0 constant:-EaseMessageCellPadding]];
+    
+    self.avatarWidthConstraint = [NSLayoutConstraint constraintWithItem:self.avatarView attribute:NSLayoutAttributeWidth relatedBy:NSLayoutRelationEqual toItem:nil attribute:NSLayoutAttributeNotAnAttribute multiplier:1.0 constant:self.avatarSize];
+    [self addConstraint:self.avatarWidthConstraint];
+    [self addConstraint:[NSLayoutConstraint constraintWithItem:self.avatarView attribute:NSLayoutAttributeHeight relatedBy:NSLayoutRelationEqual toItem:self.avatarView attribute:NSLayoutAttributeWidth multiplier:1.0 constant:0]];
+    
+    //name label
+    [self addConstraint:[NSLayoutConstraint constraintWithItem:self.nameLabel attribute:NSLayoutAttributeTop relatedBy:NSLayoutRelationEqual toItem:self.contentView attribute:NSLayoutAttributeTop multiplier:1.0 constant:0]];
+    
+    [self addConstraint:[NSLayoutConstraint constraintWithItem:self.nameLabel attribute:NSLayoutAttributeRight relatedBy:NSLayoutRelationEqual toItem:self.avatarView attribute:NSLayoutAttributeLeft multiplier:1.0 constant:-EaseMessageCellPadding]];
+    
+    self.nameHeightConstraint = [NSLayoutConstraint constraintWithItem:self.nameLabel attribute:NSLayoutAttributeHeight relatedBy:NSLayoutRelationEqual toItem:nil attribute:NSLayoutAttributeNotAnAttribute multiplier:1.0 constant:self.messageNameHeight];
+    [self addConstraint:self.nameHeightConstraint];
+    
+    //bubble view
+    [self addConstraint:[NSLayoutConstraint constraintWithItem:self.bubbleView attribute:NSLayoutAttributeRight relatedBy:NSLayoutRelationEqual toItem:self.avatarView attribute:NSLayoutAttributeLeft multiplier:1.0 constant:-EaseMessageCellPadding]];
+    [self addConstraint:[NSLayoutConstraint constraintWithItem:self.bubbleView attribute:NSLayoutAttributeTop relatedBy:NSLayoutRelationEqual toItem:self.nameLabel attribute:NSLayoutAttributeBottom multiplier:1.0 constant:0]];
+    
+    //status button
+    [self addConstraint:[NSLayoutConstraint constraintWithItem:self.statusButton attribute:NSLayoutAttributeRight relatedBy:NSLayoutRelationEqual toItem:self.bubbleView attribute:NSLayoutAttributeLeft multiplier:1.0 constant:-EaseMessageCellPadding]];
+    
+    //activity
+    [self addConstraint:[NSLayoutConstraint constraintWithItem:self.activity attribute:NSLayoutAttributeRight relatedBy:NSLayoutRelationEqual toItem:self.bubbleView attribute:NSLayoutAttributeLeft multiplier:1.0 constant:-EaseMessageCellPadding]];
+    
+    //hasRead
+    [self addConstraint:[NSLayoutConstraint constraintWithItem:self.hasRead attribute:NSLayoutAttributeRight relatedBy:NSLayoutRelationEqual toItem:self.bubbleView attribute:NSLayoutAttributeLeft multiplier:1.0 constant:-EaseMessageCellPadding]];
+}
+
+/*!
+ @method
+ @brief ���������������������
+ @discussion  ������������������������������������������������������������������cell���������������������
+ @result
+ */
+- (void)configureRecvLayoutConstraints
+{
+    //avatar view
+    [self addConstraint:[NSLayoutConstraint constraintWithItem:self.avatarView attribute:NSLayoutAttributeTop relatedBy:NSLayoutRelationEqual toItem:self.contentView attribute:NSLayoutAttributeTop multiplier:1.0 constant:EaseMessageCellPadding]];
+    
+    [self addConstraint:[NSLayoutConstraint constraintWithItem:self.avatarView attribute:NSLayoutAttributeLeft relatedBy:NSLayoutRelationEqual toItem:self.contentView attribute:NSLayoutAttributeLeft multiplier:1.0 constant:EaseMessageCellPadding]];
+    
+    self.avatarWidthConstraint = [NSLayoutConstraint constraintWithItem:self.avatarView attribute:NSLayoutAttributeWidth relatedBy:NSLayoutRelationEqual toItem:nil attribute:NSLayoutAttributeNotAnAttribute multiplier:1.0 constant:self.avatarSize];
+    [self addConstraint:self.avatarWidthConstraint];
+    [self addConstraint:[NSLayoutConstraint constraintWithItem:self.avatarView attribute:NSLayoutAttributeHeight relatedBy:NSLayoutRelationEqual toItem:self.avatarView attribute:NSLayoutAttributeWidth multiplier:1.0 constant:0]];
+    
+    //name label
+    [self addConstraint:[NSLayoutConstraint constraintWithItem:self.nameLabel attribute:NSLayoutAttributeTop relatedBy:NSLayoutRelationEqual toItem:self.contentView attribute:NSLayoutAttributeTop multiplier:1.0 constant:0]];
+    
+    [self addConstraint:[NSLayoutConstraint constraintWithItem:self.nameLabel attribute:NSLayoutAttributeLeft relatedBy:NSLayoutRelationEqual toItem:self.avatarView attribute:NSLayoutAttributeRight multiplier:1.0 constant:EaseMessageCellPadding]];
+    
+    self.nameHeightConstraint = [NSLayoutConstraint constraintWithItem:self.nameLabel attribute:NSLayoutAttributeHeight relatedBy:NSLayoutRelationEqual toItem:nil attribute:NSLayoutAttributeNotAnAttribute multiplier:1.0 constant:self.messageNameHeight];
+    [self addConstraint:self.nameHeightConstraint];
+    
+    //bubble view
+    [self addConstraint:[NSLayoutConstraint constraintWithItem:self.bubbleView attribute:NSLayoutAttributeLeft relatedBy:NSLayoutRelationEqual toItem:self.avatarView attribute:NSLayoutAttributeRight multiplier:1.0 constant:EaseMessageCellPadding]];
+    [self addConstraint:[NSLayoutConstraint constraintWithItem:self.bubbleView attribute:NSLayoutAttributeTop relatedBy:NSLayoutRelationEqual toItem:self.nameLabel attribute:NSLayoutAttributeBottom multiplier:1.0 constant:0]];
+}
+
+#pragma mark - Update Constraint
+
+/*!
+ @method
+ @brief ���������������������������
+ @discussion
+ @result
+ */
+- (void)_updateAvatarViewWidthConstraint
+{
+    if (self.avatarView) {
+        [self removeConstraint:self.avatarWidthConstraint];
+        
+        self.avatarWidthConstraint = [NSLayoutConstraint constraintWithItem:self.avatarView attribute:NSLayoutAttributeWidth relatedBy:NSLayoutRelationEqual toItem:nil attribute:NSLayoutAttributeNotAnAttribute multiplier:0 constant:self.avatarSize];
+        [self addConstraint:self.avatarWidthConstraint];
+    }
+}
+
+/*!
+ @method
+ @brief ���������������������������
+ @discussion
+ @result
+ */
+- (void)_updateNameHeightConstraint
+{
+    if (_nameLabel) {
+        [self removeConstraint:self.nameHeightConstraint];
+        
+        self.nameHeightConstraint = [NSLayoutConstraint constraintWithItem:self.nameLabel attribute:NSLayoutAttributeHeight relatedBy:NSLayoutRelationEqual toItem:nil attribute:NSLayoutAttributeNotAnAttribute multiplier:1.0 constant:self.messageNameHeight];
+        [self addConstraint:self.nameHeightConstraint];
+    }
+}
+
+#pragma mark - setter
+
+- (void)setModel:(id<IMessageModel>)model
+{
+    [super setModel:model];
+    
+    if (model.avatarURLPath) {
+        [self.avatarView sd_setImageWithURL:[NSURL URLWithString:model.avatarURLPath] placeholderImage:model.avatarImage];
+    } else {
+        self.avatarView.image = model.avatarImage;
+    }
+    _nameLabel.text = model.nickname;
+    
+    if (self.model.isSender) {
+        _hasRead.hidden = YES;
+        switch (self.model.messageStatus) {
+            case EMMessageStatusDelivering:
+            {
+                _statusButton.hidden = YES;
+                [_activity setHidden:NO];
+                [_activity startAnimating];
+            }
+                break;
+            case EMMessageStatusSucceed:
+            {
+                _statusButton.hidden = YES;
+                [_activity stopAnimating];
+                if (self.model.isMessageRead) {
+                    _hasRead.hidden = NO;
+                }
+            }
+                break;
+            case EMMessageStatusPending:
+            case EMMessageStatusFailed:
+            {
+                [_activity stopAnimating];
+                [_activity setHidden:YES];
+                _statusButton.hidden = NO;
+            }
+                break;
+            default:
+                break;
+        }
+    }
+}
+
+- (void)setMessageNameFont:(UIFont *)messageNameFont
+{
+    _messageNameFont = messageNameFont;
+    if (_nameLabel) {
+        _nameLabel.font = _messageNameFont;
+    }
+}
+
+- (void)setMessageNameColor:(UIColor *)messageNameColor
+{
+    _messageNameColor = messageNameColor;
+    if (_nameLabel) {
+        _nameLabel.textColor = _messageNameColor;
+    }
+}
+
+- (void)setMessageNameHeight:(CGFloat)messageNameHeight
+{
+    _messageNameHeight = messageNameHeight;
+    if (_nameLabel) {
+        [self _updateNameHeightConstraint];
+    }
+}
+
+- (void)setAvatarSize:(CGFloat)avatarSize
+{
+    _avatarSize = avatarSize;
+    if (self.avatarView) {
+        [self _updateAvatarViewWidthConstraint];
+    }
+}
+
+- (void)setAvatarCornerRadius:(CGFloat)avatarCornerRadius
+{
+    _avatarCornerRadius = avatarCornerRadius;
+    if (self.avatarView){
+        self.avatarView.layer.cornerRadius = avatarCornerRadius;
+    }
+}
+
+- (void)setMessageNameIsHidden:(BOOL)messageNameIsHidden
+{
+    _messageNameIsHidden = messageNameIsHidden;
+    if (_nameLabel) {
+        _nameLabel.hidden = messageNameIsHidden;
+    }
+}
+
+#pragma mark - public
+
+/*!
+ @method
+ @brief ������������cell���������
+ @discussion  
+ @result
+ */
++ (CGFloat)cellHeightWithModel:(id<IMessageModel>)model
+{
+    EaseBaseMessageCell *cell = [self appearance];
+    
+    CGFloat minHeight = cell.avatarSize + EaseMessageCellPadding * 2;
+    CGFloat height = cell.messageNameHeight;
+    if ([UIDevice currentDevice].systemVersion.floatValue == 7.0) {
+        height = 15;
+    }
+    height += - EaseMessageCellPadding + [EaseMessageCell cellHeightWithModel:model];
+    height = height > minHeight ? height : minHeight;
+    
+    return height;
+}
+
+@end

--
Gitblit v1.8.0