来斯凯网络已经一个礼拜了,怎么说呢!以为上市公司会有很多同事一起弄iOS,结果让我很失望,这里iOS开发也是刚起步不久。 都需要自己去弄的。比起新中大唯一的的好处就是给我配置了两台手提:一台时苹果,另外一台是thinkPad。还有就是双休。。。。哇 哈哈,其他的都差不多把。。。另外一点我自己比较喜欢的是我可以单独安心的做我的iOS。也是我当初看中的...... 我始终坚信,努力都是靠自己,成长的路都是自己走出来的,青春没有后悔!

    这边我要开发的项目是关于流量管理的,界面中的一个比较抢眼的效果就是:在一个圆圈中,水波浪不停的在动,而且会类似涨潮的能力。 这点也很吸引我,我也是第一次看到这种东西,也不知道它到底怎么实现的。还以为源码有多高深莫测,于是乎就在网上找了一些代码来阅读。  读了之后才让我恍然大悟,原来这些基本知识我们都已经具备,只是没想到过而已。  其大体思想就是:

1、用正玄函数来描述波形;

2: 程序处理每个像素;

3:就是不停都刷新界面来处理 每次的结果;

   此时我才对曾经看到的一句话恍然大悟:一切动画都是假象!   呵呵,的确如此 我们的眼睛跟不上计算机的刷屏而已。 其本质还是 用 CoreGraphice 来实现。

   具体的代码如下 :

-(void)drawInContext:(CGContextRef)ctx{
 
    //画图
    CGPoint center = CGPointMake(self.frame.size.width / (2), self.frame.size.height / (2));
    CGFloat radius=100;
    
    CGFloat startingAngleRad=0;
    CGFloat currentAngleRad=M_PI_2;
    UIColor *color=[UIColor colorWithRed:99/256.0 green:183/256.0 blue:70/256.0 alpha:.5];
    
    //percent 参数为 百分比 如 20%值 表示占直径的20%  即
    
    CGFloat angle= asin(2*percent-1);//根据百分比算出相对于X坐标系的弧度值,当percent >0.5 时 angle 为正值,反之为负数
    startingAngleRad=-angle;//算出开始边缘
    currentAngleRad=M_PI+angle;//算出结束边缘
    CGFloat y=2*radius*percent-radius;//算出y 方向的相对圆心坐标
    CGFloat x=percent!=0.5?y/tan(angle):radius;//算出x方向的长度
    x=abs(x);//计算绝对值
    CGFloat min_X=center.x-x;//计算出在屏幕中的绝对坐标 最小值
    CGFloat max_X=center.x+x;//计算出屏幕中的绝对坐标 最大值
    
    // Arc
    CGContextBeginPath( ctx );
    //CGContextMoveToPoint( ctx, center.x, center.y );//起点 (这里以中心为第一个点)
    //1、添加第一点
    CGContextMoveToPoint( ctx, center.x-x, center.y-y );
    CGFloat h=center.y-y;
 
    //2、添加水波浪效果,正玄函数 来计算每一个像素的坐标
    for (int i=min_X; i<=max_X; ++i) {
        y=h+4*sin((i+moveOffset)*M_PI/60);
        CGContextAddLineToPoint(ctx, i, y);
    }
    /*3、添加弧度
     * 参数说明:x,y 为圆的中心点
              :radius 为半径长度
               :startAngle 为起点弧度
               :currentAnge  是指结束到弧度
               :最后一个参数是NO表示 按照顺时针计算弧度,否则表示逆时针计算弧度。
     */
    CGContextAddArc( ctx, center.x, center.y, radius, startingAngleRad, currentAngleRad, NO );
    CGContextClosePath(ctx);
        
    CGContextSetFillColorWithColor( ctx, color.CGColor );
    CGContextSetStrokeColorWithColor( ctx, color.CGColor );
    CGContextSetLineWidth( ctx, 1 );
    CGContextDrawPath( ctx, kCGPathFillStroke );
      
}
@end

 效果图如下:

ios 圆形水波动画消失 苹果水波纹特效_Arc

ios 圆形水波动画消失 苹果水波纹特效_iOS_02

 

ios 圆形水波动画消失 苹果水波纹特效_Arc_03