码迷,mamicode.com
首页 > 其他好文 > 详细

QQ去除未读状态的动画

时间:2014-12-22 12:58:15      阅读:158      评论:0      收藏:0      [点我收藏+]

标签:ios

QQ去除未读状态的动画

by 伍雪颖

技术分享

- (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去除未读状态的动画

标签:ios

原文地址:http://blog.csdn.net/rainlesvio/article/details/42078361

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!