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 }