• 使用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
  • 相关阅读:
    FastDFS
    MYSQL日常操作
    SVN安装
    mysql主主配置
    MySQL优化
    nginx反向代理tomacat+keepalived实现动静分离、负载均衡、高可用
    nginx故障及处理
    nginx配置检测及安全配置
    nginx基本优化
    大金空调适配器
  • 原文地址:https://www.cnblogs.com/YouXianMing/p/3779328.html
Copyright © 2020-2023  润新知