首页 > 代码库 > 使用CALayer制作View的辉光效果
使用CALayer制作View的辉光效果
使用CALayer制作View的辉光效果
实现以下的辉光效果:
思路是这样子的:
1. 创建好需要实现辉光效果的View
2. 对这个View进行截图
3. 将这个截图重新添加进View中
4. 对这个截图实现改变透明度的动画
ViewController.m
// // ViewController.m // // Copyright (c) 2013 Nick Jensen. All rights reserved. // #import "ViewController.h" #import "BackedImage.h" #import "YXGCD.h" @interface ViewController () @property (nonatomic, strong) GCDTimer *timer; @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; self.view.backgroundColor = [UIColor blackColor]; // 创建Label UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 320, 70)]; label.text = @"You:Xian:Ming"; label.textAlignment = NSTextAlignmentCenter; label.font = [UIFont fontWithName:@"HelveticaNeue-UltraLight" size:40.f]; label.textColor = [UIColor redColor ]; label.center = self.view.center; [self.view addSubview:label]; // 将Label转换成Image BackedImage *backedImage = [BackedImage new]; [backedImage createBackedLayerWithView:label withColor:[UIColor cyanColor] shadowRadius:5.f]; CALayer *myLayer = backedImage.backedLayer; // 将这个layer添加进Label中 [label.layer addSublayer:myLayer]; // 开始辉光动画 _timer = [[GCDTimer alloc] initInQueue:[GCDQueue mainQueue]]; [_timer event:^{ CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"opacity"]; static int i = 0; if (i++ % 2 == 0) { animation.fromValue = [NSNumber numberWithFloat:1.f]; animation.toValue = [NSNumber numberWithFloat:0.f]; animation.duration = 0.8; myLayer.opacity = 0.f; [myLayer addAnimation:animation forKey:nil]; } else { animation.fromValue = [NSNumber numberWithFloat:0.f]; animation.toValue = [NSNumber numberWithFloat:1.f]; animation.duration = 0.8; myLayer.opacity = 1.f; [myLayer addAnimation:animation forKey:nil]; } } timeInterval: NSEC_PER_SEC * 1]; [_timer start]; } @end
BackedImage.h
// // BackedImage.h // Copyright (c) 2014年 Nick Jensen. All rights reserved. // #import <Foundation/Foundation.h> @interface BackedImage : NSObject @property (nonatomic, strong, readonly) CALayer *backedLayer; - (void)createBackedLayerWithView:(UIView *)view withColor:(UIColor *)color shadowRadius:(CGFloat)radius; @end
BackedImage.m
// // BackedImage.m // Copyright (c) 2014年 Nick Jensen. All rights reserved. // #import "BackedImage.h" @implementation BackedImage - (void)createBackedLayerWithView:(UIView *)view withColor:(UIColor *)color shadowRadius:(CGFloat)radius { UIGraphicsBeginImageContextWithOptions(view.bounds.size, NO, [UIScreen mainScreen].scale); [view.layer renderInContext:UIGraphicsGetCurrentContext()]; UIBezierPath* path = [UIBezierPath bezierPathWithRect:(CGRect){CGPointZero, CGSizeMake(view.bounds.size.width, view.bounds.size.height)}]; [color setFill]; [path fillWithBlendMode:kCGBlendModeSourceAtop alpha:1.0]; _backedLayer = [CALayer layer]; _backedLayer.frame = view.bounds; _backedLayer.contents = (__bridge id)UIGraphicsGetImageFromCurrentImageContext().CGImage; _backedLayer.shadowOpacity = 1.0f; _backedLayer.shadowOffset = CGSizeMake(0, 0); _backedLayer.shadowColor = color.CGColor; _backedLayer.shadowRadius = radius; UIGraphicsEndImageContext(); } @end
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。