From 7b02207537d35bfa1714bf8beafc921f717d100a Mon Sep 17 00:00:00 2001
From: 单军华
Date: Wed, 11 Jul 2018 10:47:42 +0800
Subject: [PATCH] 首次上传
---
screendisplay/Pods/HMEmoticon/表情键盘/Emoticon/HMEmoticonTextView.m | 329 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 329 insertions(+), 0 deletions(-)
diff --git "a/screendisplay/Pods/HMEmoticon/\350\241\250\346\203\205\351\224\256\347\233\230/Emoticon/HMEmoticonTextView.m" "b/screendisplay/Pods/HMEmoticon/\350\241\250\346\203\205\351\224\256\347\233\230/Emoticon/HMEmoticonTextView.m"
new file mode 100755
index 0000000..d25cf82
--- /dev/null
+++ "b/screendisplay/Pods/HMEmoticon/\350\241\250\346\203\205\351\224\256\347\233\230/Emoticon/HMEmoticonTextView.m"
@@ -0,0 +1,329 @@
+//
+// HMEmoticonTextView.m
+// ������������
+//
+// Created by ������ on 16/3/3.
+// Copyright �� 2016��� itcast. All rights reserved.
+//
+
+#import "HMEmoticonTextView.h"
+#import "HMEmoticonAttachment.h"
+#import "HMEmoticonInputView.h"
+
+@implementation HMEmoticonTextView {
+ UILabel *_placeHolderLabel;
+ UILabel *_lengthTipLabel;
+ NSMutableArray <NSLayoutConstraint *> *_lengthTipLabelCons;
+
+ /// ������������������
+ HMEmoticonInputView *_emoticonInputView;
+}
+
+#pragma mark - ������������
+- (BOOL)isUseEmoticonInputView {
+ return self.inputView != nil;
+}
+
+- (void)setUseEmoticonInputView:(BOOL)useEmoticonInputView {
+
+ if (self.isUseEmoticonInputView == useEmoticonInputView) {
+ return;
+ }
+
+ self.inputView = (self.inputView == nil) ? _emoticonInputView : nil;
+ [self reloadInputViews];
+}
+
+- (void)setPlaceholder:(NSString *)placeholder {
+ _placeholder = placeholder.copy;
+ _placeHolderLabel.text = _placeholder;
+}
+
+- (void)setMaxInputLength:(NSInteger)maxInputLength {
+ _maxInputLength = maxInputLength;
+
+ [self textChanged];
+}
+
+- (void)setFont:(UIFont *)font {
+ _placeHolderLabel.font = font;
+
+ [super setFont:font];
+}
+
+- (void)setText:(NSString *)text {
+ [super setText:text];
+
+ [self textChanged];
+}
+
+- (UIColor *)textColor {
+ UIColor *color = [super textColor];
+
+ return (color == nil) ? [UIColor darkGrayColor] : color;
+}
+
+- (void)setAttributedText:(NSAttributedString *)attributedText {
+ [super setAttributedText:attributedText];
+
+ [self textChanged];
+}
+
+#pragma mark - ������������
+- (instancetype)initWithFrame:(CGRect)frame textContainer:(NSTextContainer *)textContainer {
+ self = [super initWithFrame:frame textContainer:textContainer];
+
+ if (self) {
+ self.textColor = [UIColor darkGrayColor];
+ self.font = [UIFont systemFontOfSize:18];
+
+ [self prepareUI];
+ }
+
+ return self;
+}
+
+- (instancetype)initWithCoder:(NSCoder *)coder {
+ self = [super initWithCoder:coder];
+
+ if (self) {
+ [self prepareUI];
+ }
+
+ return self;
+}
+
+- (void)willMoveToWindow:(UIWindow *)newWindow {
+ [super willMoveToWindow:newWindow];
+
+ [self layoutIfNeeded];
+}
+
+- (void)dealloc {
+ [[NSNotificationCenter defaultCenter] removeObserver:self];
+}
+
+#pragma mark - ������������
+- (NSString *)emoticonText {
+
+ NSAttributedString *attributeText = self.attributedText;
+ NSMutableString *stringM = [NSMutableString string];
+
+ [attributeText
+ enumerateAttributesInRange:
+ NSMakeRange(0, attributeText.length)
+ options:0
+ usingBlock:^(NSDictionary<NSString *,id> * _Nonnull attrs, NSRange range, BOOL * _Nonnull stop) {
+
+ HMEmoticonAttachment *attachment = attrs[@"NSAttachment"];
+ if (attachment != nil) {
+ [stringM appendString:attachment.text];
+ } else {
+ [stringM appendString:[attributeText.string substringWithRange:range]];
+ }
+ }];
+
+ return stringM.copy;
+}
+
+- (void)insertEmoticon:(HMEmoticon *)emoticon isRemoved:(BOOL)isRemoved {
+
+ if (isRemoved) {
+ [self deleteBackward];
+
+ return;
+ }
+
+ if (emoticon.isEmoji) {
+ [self replaceRange:[self selectedTextRange] withText:emoticon.emoji];
+
+ return;
+ }
+
+ NSMutableAttributedString *attributeText = [[NSMutableAttributedString alloc] initWithAttributedString:self.attributedText];
+
+ NSAttributedString *emoticonStr = [HMEmoticonAttachment emoticonStringWithEmoticon:emoticon font:self.font textColor:self.textColor];
+
+ NSRange range = self.selectedRange;
+ [attributeText replaceCharactersInRange:range withAttributedString:emoticonStr];
+
+ self.attributedText = attributeText;
+ self.selectedRange = NSMakeRange(range.location + 1, 0);
+
+ [self.delegate textViewDidChange:self];
+ [[NSNotificationCenter defaultCenter] postNotificationName:UITextViewTextDidChangeNotification object:self];
+}
+
+- (void)updateTipLabelBottomConstraints:(UIView *)view {
+
+ // ������ view ���������������������������
+ if (![self.subviews containsObject:view]) {
+ NSLog(@"��������������������� textView ������������������������");
+ return;
+ }
+
+ [self removeConstraints:_lengthTipLabelCons];
+
+ [_lengthTipLabelCons removeAllObjects];
+ CGFloat margin = 5;
+ [_lengthTipLabelCons addObject:[NSLayoutConstraint
+ constraintWithItem:_lengthTipLabel
+ attribute:NSLayoutAttributeTrailing
+ relatedBy:NSLayoutRelationEqual
+ toItem:self
+ attribute:NSLayoutAttributeTrailing
+ multiplier:1.0
+ constant:-margin]];
+ [_lengthTipLabelCons addObject:[NSLayoutConstraint
+ constraintWithItem:_lengthTipLabel
+ attribute:NSLayoutAttributeBottom
+ relatedBy:NSLayoutRelationEqual
+ toItem:view
+ attribute:NSLayoutAttributeTop
+ multiplier:1.0
+ constant:-margin]];
+
+ [self addConstraints:_lengthTipLabelCons];
+}
+
+#pragma mark - ������������
+- (void)textChanged {
+ _placeHolderLabel.hidden = self.hasText;
+
+ if (_maxInputLength <= 0) {
+ _lengthTipLabel.hidden = YES;
+
+ return;
+ }
+ _lengthTipLabel.hidden = NO;
+
+ NSInteger len = _maxInputLength - self.emoticonText.length;
+ _lengthTipLabel.text = [NSString stringWithFormat:@"%zd", len];
+ _lengthTipLabel.textColor = (len >= 0) ? [UIColor lightGrayColor] : [UIColor redColor];
+}
+
+#pragma mark - ������������
+- (void)prepareInputView {
+ __weak typeof(self) weakSelf = self;
+ _emoticonInputView = [[HMEmoticonInputView alloc] initWithSelectedEmoticon:^(HMEmoticon * _Nullable emoticon, BOOL isRemoved) {
+ [weakSelf insertEmoticon:emoticon isRemoved:isRemoved];
+ }];
+}
+
+- (void)prepareUI {
+ // 0. ������������������
+ [self prepareInputView];
+
+ // 1. ������������������������
+ [[NSNotificationCenter defaultCenter]
+ addObserver:self
+ selector:@selector(textChanged)
+ name:UITextViewTextDidChangeNotification object:nil];
+
+ // 2. ������������
+ self.alwaysBounceVertical = YES;
+ self.keyboardDismissMode = UIScrollViewKeyboardDismissModeOnDrag;
+
+ // 3. ������������
+ UIView *sizeView = [[UIView alloc] init];
+ sizeView.backgroundColor = [UIColor clearColor];
+ sizeView.userInteractionEnabled = NO;
+
+ [self insertSubview:sizeView atIndex:0];
+
+ sizeView.translatesAutoresizingMaskIntoConstraints = NO;
+ [self addConstraints:[NSLayoutConstraint
+ constraintsWithVisualFormat:@"H:|-0-[sizeView]-0-|"
+ options:0
+ metrics:nil
+ views:@{@"sizeView": sizeView}]];
+ [self addConstraints:[NSLayoutConstraint
+ constraintsWithVisualFormat:@"V:|-0-[sizeView]-0-|"
+ options:0
+ metrics:nil
+ views:@{@"sizeView": sizeView}]];
+ [self addConstraint:[NSLayoutConstraint
+ constraintWithItem:sizeView
+ attribute:NSLayoutAttributeWidth
+ relatedBy:NSLayoutRelationEqual
+ toItem:self
+ attribute:NSLayoutAttributeWidth
+ multiplier:1.0
+ constant:0]];
+ [self addConstraint:[NSLayoutConstraint
+ constraintWithItem:sizeView
+ attribute:NSLayoutAttributeHeight
+ relatedBy:NSLayoutRelationEqual
+ toItem:self
+ attribute:NSLayoutAttributeHeight
+ multiplier:1.0
+ constant:0]];
+
+ // 4. ������������
+ _placeHolderLabel = [[UILabel alloc] init];
+ _placeHolderLabel.text = _placeholder;
+ _placeHolderLabel.textColor = [UIColor lightGrayColor];
+ _placeHolderLabel.font = self.font;
+ _placeHolderLabel.numberOfLines = 0;
+
+ [self addSubview:_placeHolderLabel];
+
+ _placeHolderLabel.translatesAutoresizingMaskIntoConstraints = NO;
+ CGFloat leftOffset = 5;
+ CGFloat topOffset = 8;
+ [self addConstraint:[NSLayoutConstraint
+ constraintWithItem:_placeHolderLabel
+ attribute:NSLayoutAttributeLeading
+ relatedBy:NSLayoutRelationEqual
+ toItem:self
+ attribute:NSLayoutAttributeLeading
+ multiplier:1.0
+ constant:leftOffset]];
+ [self addConstraint:[NSLayoutConstraint
+ constraintWithItem:_placeHolderLabel
+ attribute:NSLayoutAttributeTop
+ relatedBy:NSLayoutRelationEqual
+ toItem:self
+ attribute:NSLayoutAttributeTop
+ multiplier:1.0
+ constant:topOffset]];
+ [self addConstraint:[NSLayoutConstraint
+ constraintWithItem:_placeHolderLabel
+ attribute:NSLayoutAttributeWidth
+ relatedBy:NSLayoutRelationLessThanOrEqual
+ toItem:self
+ attribute:NSLayoutAttributeWidth
+ multiplier:1.0
+ constant:-2 * leftOffset]];
+
+ // 5. ������������������
+ _lengthTipLabel = [[UILabel alloc] init];
+ _lengthTipLabel.text = [NSString stringWithFormat:@"%zd", _maxInputLength];
+ _lengthTipLabel.textColor = [UIColor lightGrayColor];
+ _lengthTipLabel.font = [UIFont systemFontOfSize:12];
+
+ [self addSubview:_lengthTipLabel];
+
+ _lengthTipLabel.translatesAutoresizingMaskIntoConstraints = NO;
+ _lengthTipLabelCons = [NSMutableArray array];
+ [_lengthTipLabelCons addObject:[NSLayoutConstraint
+ constraintWithItem:_lengthTipLabel
+ attribute:NSLayoutAttributeTrailing
+ relatedBy:NSLayoutRelationEqual
+ toItem:self
+ attribute:NSLayoutAttributeTrailing
+ multiplier:1.0
+ constant:-leftOffset]];
+ [_lengthTipLabelCons addObject:[NSLayoutConstraint
+ constraintWithItem:_lengthTipLabel
+ attribute:NSLayoutAttributeBottom
+ relatedBy:NSLayoutRelationEqual
+ toItem:self
+ attribute:NSLayoutAttributeBottom
+ multiplier:1.0
+ constant:-leftOffset]];
+
+ [self addConstraints:_lengthTipLabelCons];
+}
+
+@end
--
Gitblit v1.8.0