QQ去除未读状态的动画

by 伍雪颖
github代码
- (void)drawRect:(CGRect)rect {
    switch (_state) {
        case SRSlimeStateNormal:
        {
            float percent = 1 - distansBetween(_startPoint , _toPoint) / _viscous;
            if (percent == 1) {
                CGContextRef context = UIGraphicsGetCurrentContext();
                UIBezierPath *path = [UIBezierPath bezierPathWithRoundedRect:CGRectMake(_startPoint.x - _radius, _startPoint.y - _radius, 2*_radius, 2*_radius)
                                                                cornerRadius:_radius];
                [self setContext:context path:path];
                CGContextDrawPath(context, kCGPathFillStroke);
            }else {
                CGFloat startRadius = _radius * (kStartTo + (1-kStartTo)*percent);
                CGFloat endRadius = _radius * (kEndTo + (1-kEndTo)*percent);
                CGContextRef context = UIGraphicsGetCurrentContext();
               
                UIBezierPath *path = [self bodyPath:startRadius
                                                end:endRadius
                                            percent:percent];
                [self setContext:context path:path];
                CGContextDrawPath(context, kCGPathFillStroke);
                if (percent <= 0) {
                    _state = SRSlimeStateShortening;
                    [self scaling];
                }
            }
        }
            break;
        case SRSlimeStateShortening:
        {
            _toPoint = CGPointMake((_toPoint.x - _startPoint.x)*0.8 + _startPoint.x,
                                       (_toPoint.y - _startPoint.y)*0.8 + _startPoint.y);
            float p = distansBetween(_startPoint, _toPoint) / _viscous;
            float percent =1 -p;
            float r = _radius * p;
           
            if (p > 0.01) {
                CGFloat startRadius = r * (kStartTo + (1-kStartTo)*percent);
                CGContextRef context = UIGraphicsGetCurrentContext();
               
                CGFloat endRadius = r * (kEndTo + (1-kEndTo)*percent) * (1+percent / 2);
                UIBezierPath *path = [self bodyPath:startRadius
                                                end:endRadius
                                            percent:percent];
                [self setContext:context path:path];
                CGContextDrawPath(context, kCGPathFillStroke);
            }else {
                self.hidden = YES;
                _state = SRSlimeStateMiss;
            }
        }
            break;
        default:
            break;
    }
}

QQ去除未读状态的动画相关推荐

  1. mysql消息已读未读_Redis实现信息已读未读状态提示

    本文为大家分享了Redis实现信息已读未读状态提示的关键代码,希望可以给大家一些启发,具体内容如下 前提: 假如现在有2个模块需要提示消息:只要存在用户在上个时间点之后没有看过的信息就提示用户有新的信 ...

  2. 管理员发送系统公告,每个用户登陆可查看自己的已读和未读状态的公告

    文章目录 准备工作 数据库表 Qo部分 实体类部分 显示公告的控制器部分(list) 查询公告的业务层方法 点击查看按钮,则将未读设为已读 所对应的控制器 所用到的sql语句 如何新增公告,并在中间表 ...

  3. android+仿qq未读消息数量,仿qq自定义未读消息数显示角标

    66FF020E13B921CB19C7542F4801AF43.png 如图所示,我们需要实现的效果 在消息tab上,是一个组合的自定义view,具体实现如下 android:layout_widt ...

  4. java mail 接受QQ邮箱未读的邮件

    案例代码如下 //创建属性对象Properties p = new Properties();p.put("mail.imap.auth.login.disable", " ...

  5. Android自定义控件:类QQ未读消息拖拽效果

    QQ的未读消息,算是一个比较好玩的效果,趁着最近时间比较多,参考了网上的一些资料之后,本次实现一个仿照QQ未读消息的拖拽小红点: 首先我们从最基本的原理开始分析,看一张图: 这个图该怎么绘制呢?实际上 ...

  6. Android 仿QQ未读消息拖拽删除粘性控件效果

    效果图: 分析  一 : 1.应用的地方:如未读数据的清除等 2.这个控件要实现哪些功能呢? 1)拖拽超出范围时,断开了,此时我们松手,图标消失 2)拖拽超出范围时,断开了,此时我们把图标移动回去,图 ...

  7. IM群聊消息的已读未读功能在存储空间方面的实现思路探讨

    1.引言 IM系统中,特别是在企业应用场景下,消息的已读未读状态是一个强需求. 以阿里的钉钉为例,钉钉的产品定位是用于商务交流,其"强制已读回执"功能,让职场人无法再"假 ...

  8. 语音消息以及未读提醒连续播放

    微信引入语音聊天后,使得语音聊天非常火.最近做了一个关于语音聊天demo,现在介绍下整个实现过程:包括录音.保存音频文件至SD卡.发送录音文件.接收新语音消息红点提醒.播放暂停.未读语音消息连续播放. ...

  9. 面试官:群聊消息的已读未读功能,你来设计一个?

    欢迎关注方志朋的博客,回复"666"获面试宝典 一朋友和我讨论他前段时间面试某大公司的一题目 : 企业IM比如企业微信.钉钉里面的群消息的有个已读未读的功能,发送者刚发出消息时,当 ...

  10. 群聊消息“已读”/“未读” 功能解决方案!

    一朋友和我讨论他前段时间面试某大公司的一题目: 企业IM比如企业微信.钉钉里面的群消息的有个已读未读的功能,发送者刚发出消息时,当前群里其他群成员都是未读状态,陆陆续续有人看了这个消息,这时候消息的详 ...

最新文章

  1. 2019年计算机考研408真题
  2. MapReduce的优点
  3. 牛逼!不得不服,第一次有人把Java 反射机制讲解这么透!
  4. “约见”面试官系列之常见面试题第四十三篇之页面输入url之后发生了什么?(建议收藏)
  5. CentOS 6.0 + Zabbix 1.8.5 服务器端安装
  6. IOS 计时器 NSTimer
  7. IDEA 没有创建servlet选项问题的解决
  8. PHP 将二维数组转成一维数组
  9. SpringMVC学习(二)使用注解开发SpringMVC
  10. 韦东山驱动视频笔记——6.输入子系统之编写驱动程序
  11. 图像复原——维纳滤波
  12. RFB_Net(ECCV 2018)
  13. Adobe Dreamweaver CS5和Photoshop CS5序列号
  14. STM32H750移植STemWin,驱动ST7789
  15. 初探PHP开源采集器----蓝天采集器
  16. Mac 重启后自动启动 docker container
  17. 【日常问题解决】docker 映射端口出错
  18. 网络综合布线实训室解决方案
  19. java的ognl写文件_JAVA之:OGNL表达式练习
  20. 人工智能自然语言处理技术在财务管理专业的应用

热门文章

  1. Java基础---Java---正则表达式-----匹配、切割、替换、获取等方法
  2. linux qt程序窗口大小变化,Qt调整初始窗口大小
  3. android 傅里叶变换_Android连载38访问联系人
  4. golang语言函数--示例--模板--小程序模板
  5. java-jdk环境下载
  6. mysql随机姓名_mysql 随机生成姓名函数,及模拟大量测试数据
  7. 多层陶瓷电容器用处_元器件用法:多层陶瓷电容器的用途
  8. pb 应用 迁移 linux_将你的应用迁移到 Python 3 的三个步骤 | Linux 中国
  9. python读取excel_Python简单读取Excel示例
  10. 数据浪潮之间的前端工程师