• iOS 实现类似雷达效果的核心代码


     1 -(void)drawRect:(CGRect)rect
     2 {
     3     [[UIColor clearColor]setFill];
     4     UIRectFill(rect);
     5     NSInteger pulsingCount = 3;
     6     double animationDuration = 2;
     7     
     8     CALayer * animationLayer = [[CALayer alloc]init];
     9     self.animationLayer = animationLayer;
    10     
    11     for (int i = 0; i < pulsingCount; i++) {
    12         CALayer * pulsingLayer = [[CALayer alloc]init];
    13         pulsingLayer.frame = CGRectMake(0, 0, rect.size.width, rect.size.height);
    14         pulsingLayer.backgroundColor = [UIColor colorWithRed:92.0/255.0 green:181.0/255.0 blue:217.0/255.0 alpha:1.0].CGColor;
    15         pulsingLayer.borderColor = [UIColor colorWithRed:92.0/255.0 green:181.0/255.0 blue:217.0/255.0 alpha:1.0].CGColor;
    16         pulsingLayer.borderWidth = 1.0;
    17         pulsingLayer.cornerRadius = rect.size.height/2;
    18         
    19         CAMediaTimingFunction * defaultCurve = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionLinear];
    20         
    21         CAAnimationGroup * animationGroup = [[CAAnimationGroup alloc]init];
    22         animationGroup.fillMode = kCAFillModeBoth;
    23         animationGroup.beginTime = CACurrentMediaTime() + (double)i * animationDuration/(double)pulsingCount;
    24         animationGroup.duration = animationDuration;        animationGroup.repeatCount = HUGE_VAL;
    25         animationGroup.timingFunction = defaultCurve;
    26         
    27         CABasicAnimation * scaleAnimation = [CABasicAnimation animationWithKeyPath:@"transform.scale"];
    28         scaleAnimation.autoreverses = NO;
    29         scaleAnimation.fromValue = [NSNumber numberWithDouble:0.2];
    30         scaleAnimation.toValue = [NSNumber numberWithDouble:1.0];
    31         
    32         CAKeyframeAnimation * opacityAnimation = [CAKeyframeAnimation animationWithKeyPath:@"opacity"];
    33         opacityAnimation.values = @[[NSNumber numberWithDouble:1.0],[NSNumber numberWithDouble:0.5],[NSNumber numberWithDouble:0.3],[NSNumber numberWithDouble:0.0]];
    34         opacityAnimation.keyTimes = @[[NSNumber numberWithDouble:0.0],[NSNumber numberWithDouble:0.25],[NSNumber numberWithDouble:0.5],[NSNumber numberWithDouble:1.0]];
    35         animationGroup.animations = @[scaleAnimation,opacityAnimation];
    36         
    37         [pulsingLayer addAnimation:animationGroup forKey:@"pulsing"];
    38         [animationLayer addSublayer:pulsingLayer];
    39     }
    40     self.animationLayer.zPosition = -1;//重新加载时,使动画至底层
    41     [self.layer addSublayer:self.animationLayer];
    42     
    43     CALayer * thumbnailLayer = [[CALayer alloc]init];
    44     thumbnailLayer.backgroundColor = [UIColor whiteColor].CGColor;
    45     CGRect thumbnailRect = CGRectMake(0, 0, 46, 46);
    46     thumbnailRect.origin.x = (rect.size.width - thumbnailRect.size.width)/2.0;
    47     thumbnailRect.origin.y = (rect.size.height - thumbnailRect.size.height)/2.0;
    48     thumbnailLayer.frame = thumbnailRect;
    49     thumbnailLayer.cornerRadius = 23.0;
    50     thumbnailLayer.borderWidth = 1.0;
    51     thumbnailLayer.masksToBounds = YES;
    52     thumbnailLayer.borderColor = [UIColor whiteColor].CGColor;
    53     UIImage * thumbnail = self.thumbnailImage;
    54     thumbnailLayer.contents = (id)thumbnail.CGImage;
    55     thumbnailLayer.zPosition = -1;
    56     [self.layer addSublayer:thumbnailLayer];
    57 }

  • 相关阅读:
    定时器的使用
    new LayoutParams 使用
    判断,日期是是昨天,前天 ,今天
    google推出的SwipeRefreshLayout下拉刷新用法
    Intent的Flag
    Eclipse Java注释模板设置详解
    Eclipse的模板设置代码
    Android如何在java代码中设置margin
    软键盘挡住输入框的解决方案
    Android自定义遮罩层设计
  • 原文地址:https://www.cnblogs.com/machao/p/5135203.html
Copyright © 2020-2023  润新知