QQ去除未读状态的动画

by 伍雪颖

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcmFpbmxlc3Zpbw==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">


- (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. QQ中未读气泡拖拽消失的实现(参照一位年轻牛B的博主的思路自己实现了一下)

    原文链接:http://kittenyang.com/drawablebubble/,博主年轻却很有思想.相仿的年纪,很佩服他! 首先分析拖拽时的图,大圆.不规则的图(实际上时有规律的不然也画不出来, ...

  2. wing带你玩转自定义view系列(2) 简单模仿qq未读消息去除效果

    上一篇介绍了贝塞尔曲线的简单应用 仿360内存清理效果 这一篇带来一个  两条贝塞尔曲线的应用 : 仿qq未读消息去除效果. 转载请注明出处:http://blog.csdn.net/wingicho ...

  3. MailKit---如何知道文件夹下有多少封未读邮件

    如果在mailkit中,文件夹已经选中并打开了的话,那直接使用ImapFolder.Unread属性就可以获取到有多少封未读邮件了. 如果文件夹没有打开,那么你还可以使用查询状态的方法来获取未读状态的 ...

  4. 解决QQ未启用状态,QQ留言图标未启用

    最近由于腾讯升级QQ一些东西,导致QQ图标成未启用状态:如图 解决方法,到腾讯此站点登陆一下即可, http://wp.qq.com/set.html 另外设置 没有保存按钮,如果选择完全公开,到自己 ...

  5. Android 高仿QQ滑动弹出菜单标记已读、未读消息

    在上一篇博客<Android 高仿微信(QQ)滑动弹出编辑.删除菜单效果,增加下拉刷新功能>里,已经带着大家学习如何使用SwipeMenuListView这一开源库实现滑动列表弹出菜单,接 ...

  6. android 实现类似qq未读消息点击循环显示

    public void jumpUnread(boolean cycle) { List<ContactLogModel> dataList = adapter.getContactLog ...

  7. iOS 未读消息角标 仿QQ拖拽 简单灵活 支持xib(源码)

    一.效果 二.简单用法 超级简单,2行代码集成:xib可0代码集成,只需拖一个view关联LFBadge类即可 //一般view上加角标 _badge1 = [[LFBadge alloc] init ...

  8. android 项目学习随笔十三(ListView实现ITEM点击事件,将已读状态持久化到本地)

    1.因为给LISTVIEW增加了两个头布局,所以在点击事件ITEM索引会增加2,比如原来第一条数据的索引应该为0,增加两个头布局后,它的索引变为        2,为了使LISTVIEW的ITEM在点 ...

  9. 一种读取Exchange的用户未读邮件数方法!

    已好几个月没写博客了,由于之前忙于开发基于Sharepoint上的移动OA(AgilePoint)和采用混合移动开发技术开发一个安卓版的企业通讯录APP(数据与lync一致),并于1月初正式上线.马年 ...

随机推荐

  1. spring事务详解(一)初探讨

    一.什么是事务 维基百科:数据库事务(简称:事务)是数据库管理系统执行过程中的一个逻辑单位,由一个有限的数据库操作序列构成.理解:事务(Transaction)是数据库区别于文件系统的重要特性之一.传 ...

  2. python3之安装、pip、setuptools

    1.python3安装 下载地址:https://www.python.org/ftp/python/3.6.5/Python-3.6.5.tgz #安装环境centOS 7 #安装依赖包: yum ...

  3. 利用backtrace和ucontex定位segment错误【转】

    转自:https://blog.csdn.net/gqtcgq/article/details/53883546 C程序运行时,经常会碰到”segmentfault”错误.这是由于程序中非法访问内存导 ...

  4. linux网桥浅析

    linux网桥浅析 原文链接:http://hi.baidu.com/_kouu/item/25787d38efec56637c034bd0 什么是桥接?简单来说,桥接就是把一台机器上的若干个网络接口 ...

  5. python enumerate用法总结【转】

    enumerate()说明 enumerate()是python的内置函数 enumerate在字典上是枚举.列举的意思 对于一个可迭代的(iterable)/可遍历的对象(如列表.字符串),enum ...

  6. java多线程计算和

    如题:如何利用多线程实现1~1000000000的和 本文利用Callable可以返回值的特性,并将执行结果用CompletionService进行存储,最后将分步值累加. import java.u ...

  7. 【转】使用import scope解决maven继承(单)问题

    http://blog.csdn.net/mn960mn/article/details/50894022 测试环境 maven 3.3.9 想必大家在做SpringBoot应用的时候,都会有如下代码 ...

  8. JQ实现弹幕效果

    JQ实现弹幕效果,快来吐糟你的想法吧 效果图: 代码如下,复制即可使用: <!DOCTYPE html> <html> <head> <meta charse ...

  9. [转]hadoop新手错误解决方法

    解决Exception: org.apache.hadoop.io.nativeio.NativeIO$Windows.access0(Ljava/lang/String;I)Z 等一系列问题,lja ...

  10. android:怎么实现一个控件与另一个指定控件左对齐

    https://segmentfault.com/q/1010000003905460?_ea=425861 针对你这种情况,最简单的一种办法是,设置两个TextView的宽度为固定值,且相等. Li ...