美文网首页
聊天窗口小技术点

聊天窗口小技术点

作者: o无尘o | 来源:发表于2015-09-29 09:31 被阅读145次

文字输入UITextView 随文字行数变高

static void *textVObservingContext = &textVObservingContext;

- (void)addObservers
{
    [self.inputV.textV addObserver:self
                 forKeyPath:NSStringFromSelector(@selector(contentSize))
                    options:NSKeyValueObservingOptionOld | NSKeyValueObservingOptionNew
                    context:textVObservingContext];
}

- (void)observeValueForKeyPath:(NSString *)keyPath
                      ofObject:(id)object
                        change:(NSDictionary *)change
                       context:(void *)context
{
    if (context != textVObservingContext) return;
    if (object != self.inputV.textV) return;
    if (![keyPath isEqualToString:NSStringFromSelector(@selector(contentSize))]) return;
    
    CGSize oldContentSize = [[change objectForKey:NSKeyValueChangeOldKey] CGSizeValue];
    CGSize newContentSize = [[change objectForKey:NSKeyValueChangeNewKey] CGSizeValue];
    
    CGFloat dy = newContentSize.height - oldContentSize.height;
    // self.maxInputVHeight = 115 这里会相等是因为下面有重新调整dy值
    if (self.inputV.bounds.size.height == self.maxInputVHeight) {
        if (dy > 0 || self.inputV.textV.contentOffset.y > 0) return;
    }
    
    if (dy > 0) { // 增高的情况
        CGFloat curInputVHeight = self.inputV.bounds.size.height;
        CGFloat newInputVHeight = curInputVHeight + dy;
        // 重新调整距离 为了上面的 == 判断能相等
        if (newInputVHeight >= self.maxInputVHeight) {
            dy = self.maxInputVHeight - curInputVHeight;
        }
    } else { // 缩小的情况
        //if (self.inputV.textV.contentOffset.y == 0) return;
        if (oldContentSize.height > self.maxInputVHeight && newContentSize.height > InputVHeight) return;
    }

    // 调整输入工具条高度
    [self intputVHeightChange:dy];
}

- (void)intputVHeightChange:(CGFloat)dy
{
    CGFloat proposedHeight = self.inputV.bounds.size.height + dy;
    
    // 最小是44高度
    CGFloat finalHeight = MAX(proposedHeight, 44);
    [self.inputV updateConstraints:^(MASConstraintMaker *make) {
        make.height.equalTo(finalHeight);
    }];
    [self.view setNeedsUpdateConstraints];
    [self.view layoutIfNeeded];
}

height.gifheight.gif

发送图片消息显示的效果(如上图所示)

- (void)testBubbleImage
{
    // 显示的图片
    self.showIV.image = [UIImage imageNamed:@"goldengate"];

    // 泡泡图片
    UIImageView *bubbleIV = [[UIImageView alloc] init];
    
    // 从正中间拉伸的图片
    UIImage *bubbleImage = [UIImage imageNamed:@"send_nor"];
    UIEdgeInsets insets = UIEdgeInsetsMake(bubbleImage.size.height / 2 - 1,
                                           bubbleImage.size.width / 2 - 1,
                                           bubbleImage.size.height / 2 + 1,
                                           bubbleImage.size.width / 2 + 1);
    bubbleIV.image = [bubbleImage resizableImageWithCapInsets:insets];
    //必须设置frame
    //bubbleIV.frame = CGRectInset(self.showIV.bounds, 2.0f, 2.0f);
    bubbleIV.frame = self.showIV.bounds;
    //也可以添加为子控件
    //[self.view addSubview:bubbleIV];
    
    //设置mask 就能做到泡泡边框的图片 如上图所示
    self.showIV.layer.mask = bubbleIV.layer;
}

参考资料:
https://github.com/wangjun59/JSQMessagesViewController

相关文章

  • 聊天窗口小技术点

    文字输入UITextView 随文字行数变高 发送图片消息显示的效果(如上图所示) 参考资料: https://...

  • 追女生怎么找话题,攻略技巧流程全记录,聊到女生直接叫男朋友

    其实跟女生聊天并不难,精确的抓住女生给出来的窗口互动聊天,多运用点小套路你也能行,下图是某社交软件的聊天截图,追女...

  • 聊天窗口

    服务端 客户端 似乎是jtextfield部分写的不对。线程的影响又是什么呢?反正运行不起来...

  • 微信点击链接:debugx5.qq.com提示您使用的不是x5内

    因为要测试小程序,需要webview调试功能。正常来说在微信任意一个聊天窗口输入:debugx5.qq.com,点...

  • 聊天窗口2

    服务端 客户端 debug了一下,服务端的java ArrayList chatmes出了点问题,为什么Outp...

  • 极简教育

    极简教育技术: 极简教育,极致简单的教育技术,小技术大应用,小窗口,大世界,小平台,大舞台。只要有手机,不需要高深...

  • Linux截图软件

    在Ubuntu下找个可以编辑的截图软件真的是太难了 方案一:使用米聊的聊天窗口的截图原则弊端: 米聊窗口不能调小,...

  • 微信里的小事

    我们并没有经常聊天。 我默默戳开聊天窗口, 又关上了。 再次戳开聊天窗口, 在回复框打上几个字, 又删掉了。 点开...

  • SCUM相关操作说明

    聊天窗口:按【T】呼出聊天窗口 按【TAB】进行频道切换白色:附近频道【附近200米可见】蓝色:世界频道【当前服务...

  • CT的窗口技术

    越是简单的技术越应该引起重视,CT的窗口技术看似简单,其实蕴藏着丰富的知识。了解和熟练使用窗口技术对于CT的扫描和...

网友评论

      本文标题:聊天窗口小技术点

      本文链接:https://www.haomeiwen.com/subject/qtwwcttx.html