提升IM聊天界面的体验

IM用户体验最重要的一环估计就是聊天界面了,最近产品中私信部分换成IM形式;由于产品的快速迭代,最终方案我们选择了使用第三方IM,腾讯开发平台的云通信IM;选择他们的考虑是,基于QQ技术方案开放出来的服务,在技术和用户压力方面应该比较可靠。

来说说聊天界面的那些小细节优化吧,虽然我还做的不好,但先做个小记录。 我对比了QQ、微信、钉钉,其中微信是做的最好的,交互逻辑清晰,体验顺畅。钉钉是基于collectionView的,其他的没具体看他们是基于tableView 还是collectionView。

11F1F919-D42A-4F5C-ACD9-E2AB3EF7CAA6.png
原因

在下拉获取历史记录的时候会出现界面跳动的情况,钉钉、QQ也不例外,微信是做的最平滑的(截止写这篇文章时)。

我也是基于collectionView来做聊天界面,来具体看看怎么实现这样一个平滑加载的过程吧。

1.首选继承UICollectionView 重写setContentSize: 方法

- (void)setContentSize:(CGSize)contentSize {
    if (!CGSizeEqualToSize(self.contentSize, CGSizeZero))  {
        if (contentSize.height > self.contentSize.height) {
            CGPoint offset = self.contentOffset;
            offset.y += (contentSize.height - self.contentSize.height);
            self.contentOffset = offset;
        }
    }
    [super setContentSize:contentSize];
}

如果加载出新内容,说明新的contentSize.height 会比原来大,这时候再做一个offset就可以了,这样视觉上就不会看到跳动一下。

2017-06-15 11_23_46.gif

还有一个需要注意的地方就是隐式动画,当刚开始进入聊天界面UICollectionView 加载出所有cell的时候需要滚动到底部,默认情况下会有一个视觉上的滚动过程,所以需要关闭掉这个滚动视觉效果,给人一种一进来就加载好了的错觉才是上策。

[UIView setAnimationsEnabled:NO];
            dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(time * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
                [self.collectionView reloadData];
                self.isLoading = NO;
                [UIView setAnimationsEnabled:YES];
            });
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 14,667评论 4 61
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 176,239评论 25 709
  • 给自己一份坚强,擦干眼泪;给自己一份自信,不卑不亢;给自己一份洒脱,悠然前行。轻轻品,静静藏。笑对忧伤,与阳光同行...
    伽思珂阅读 1,504评论 0 1
  • 一 再见, 再也不见, 再也不贱。 二 想你, 却, 没了权利。 三 您所拨打的电话暂时无法接通, 您所拨打的电话...
    大姜頭阅读 1,081评论 0 0

友情链接更多精彩内容