zoukankan      html  css  js  c++  java
  • 支持辉光效果的Label

    支持辉光效果的Label

    效果

    源码

    https://github.com/YouXianMing/UI-Component-Collection 中的 FBGlowLabel

    //
    //  FBGlowLabel.h
    //
    //  Created by YouXianMing on 16/8/3.
    //  Copyright © 2016年 YouXianMing. All rights reserved.
    //
    //  https://github.com/lyokato/fbglowlabel
    //
    
    #import <UIKit/UIKit.h>
    
    @interface FBGlowLabel : UILabel
    
    /**
     *  Glow size, default is 0.f.
     */
    @property (nonatomic) CGFloat glowSize;
    
    /**
     *  Glow color, default is clear color.
     */
    @property (nonatomic, strong) UIColor *glowColor;
    
    /**
     *  Inner glow size, default is 0.f.
     */
    @property (nonatomic) CGFloat innerGlowSize;
    
    /**
     *  Inner glow color, default is clear color.
     */
    @property (nonatomic, strong) UIColor *innerGlowColor;
    
    @end
    //
    //  FBGlowLabel.m
    //
    //  Created by YouXianMing on 16/8/3.
    //  Copyright © 2016年 YouXianMing. All rights reserved.
    //
    
    #import "FBGlowLabel.h"
    
    @implementation FBGlowLabel
    
    - (id)initWithFrame:(CGRect)frame {
        
        if (self = [super initWithFrame:frame]) {
            
            [self setup];
        }
        
        return self;
    }
    
    - (id)initWithCoder:(NSCoder *)coder {
        
        if (self = [super initWithCoder:coder]) {
            
            [self setup];
        }
        
        return self;
    }
    
    - (void)setup {
        
        self.glowSize       = 0.0f;
        self.glowColor      = [UIColor clearColor];
        
        self.innerGlowSize  = 0.0f;
        self.innerGlowColor = [UIColor clearColor];
    }
    
    - (void)drawTextInRectForIOS7:(CGRect)rect {
        
        CGContextRef ctx = UIGraphicsGetCurrentContext();
        
        UIGraphicsBeginImageContextWithOptions(rect.size, NO, 0.0);
        
        [super drawTextInRect:rect];
        UIImage *textImage = UIGraphicsGetImageFromCurrentImageContext();
        UIGraphicsEndImageContext();
        
        CGContextSaveGState(ctx);
        
        if (_glowSize > 0) {
            
            CGContextSetShadow(ctx, CGSizeZero, _glowSize);
            CGContextSetShadowWithColor(ctx, CGSizeZero, _glowSize, _glowColor.CGColor);
        }
        
        [textImage drawAtPoint:rect.origin];
        CGContextRestoreGState(ctx);
        
        if (_innerGlowSize > 0) {
    
            UIGraphicsBeginImageContextWithOptions(rect.size, NO, 0.0);
            CGContextRef ctx2 = UIGraphicsGetCurrentContext();
            CGContextSaveGState(ctx2);
            CGContextSetFillColorWithColor(ctx2, [UIColor blackColor].CGColor);
            CGContextFillRect(ctx2, rect);
            CGContextTranslateCTM(ctx2, 0.0, rect.size.height);
            CGContextScaleCTM(ctx2, 1.0, -1.0);
            CGContextClipToMask(ctx2, rect, textImage.CGImage);
            CGContextClearRect(ctx2, rect);
            CGContextRestoreGState(ctx2);
            
            UIImage *inverted = UIGraphicsGetImageFromCurrentImageContext();
            CGContextClearRect(ctx2, rect);
            
            CGContextSaveGState(ctx2);
            CGContextSetFillColorWithColor(ctx2, _innerGlowColor.CGColor);
            CGContextSetShadowWithColor(ctx2, CGSizeZero, _innerGlowSize, _innerGlowColor.CGColor);
            [inverted drawAtPoint:CGPointZero];
            CGContextTranslateCTM(ctx2, 0.0, rect.size.height);
            CGContextScaleCTM(ctx2, 1.0, -1.0);
            CGContextClipToMask(ctx2, rect, inverted.CGImage);
            CGContextClearRect(ctx2, rect);
            CGContextRestoreGState(ctx2);
            
            UIImage *innerShadow = UIGraphicsGetImageFromCurrentImageContext();
            
            UIGraphicsEndImageContext();
            [innerShadow drawAtPoint:rect.origin];
        }
    }
    
    - (void)drawTextInRectForIOS6:(CGRect)rect {
        
        CGContextRef ctx = UIGraphicsGetCurrentContext();
        CGContextSaveGState(ctx);
        
        if (self.glowSize > 0) {
            
            CGContextSetShadow(ctx, CGSizeZero, _glowSize);
            CGContextSetShadowWithColor(ctx, CGSizeZero, _glowSize, _glowColor.CGColor);
        }
        
        [super drawTextInRect:rect];
        CGContextRestoreGState(ctx);
        
        if (_innerGlowSize > 0) {
    
            UIGraphicsBeginImageContextWithOptions(rect.size, NO, 0.0);
            
            CGContextRef ctx2 = UIGraphicsGetCurrentContext();
            [super drawTextInRect:rect];
            
            UIImage *textImage = UIGraphicsGetImageFromCurrentImageContext();
            CGContextClearRect(ctx2, rect);
            
            CGContextSaveGState(ctx2);
            CGContextSetFillColorWithColor(ctx2, [UIColor blackColor].CGColor);
            CGContextFillRect(ctx2, rect);
            CGContextTranslateCTM(ctx2, 0.0, rect.size.height);
            CGContextScaleCTM(ctx2, 1.0, -1.0);
            CGContextClipToMask(ctx2, rect, textImage.CGImage);
            CGContextClearRect(ctx2, rect);
            CGContextRestoreGState(ctx2);
            
            UIImage *inverted = UIGraphicsGetImageFromCurrentImageContext();
            CGContextClearRect(ctx2, rect);
            
            CGContextSaveGState(ctx2);
            CGContextSetFillColorWithColor(ctx2, _innerGlowColor.CGColor);
            CGContextSetShadowWithColor(ctx2, CGSizeZero, _innerGlowSize, _innerGlowColor.CGColor);
            [inverted drawAtPoint:CGPointZero];
            CGContextTranslateCTM(ctx2, 0.0, rect.size.height);
            CGContextScaleCTM(ctx2, 1.0, -1.0);
            CGContextClipToMask(ctx2, rect, inverted.CGImage);
            CGContextClearRect(ctx2, rect);
            CGContextRestoreGState(ctx2);
            
            UIImage *innerShadow = UIGraphicsGetImageFromCurrentImageContext();
            
            UIGraphicsEndImageContext();
            [innerShadow drawAtPoint:rect.origin];
        }
    }
    
    - (void)drawTextInRect:(CGRect)rect {
        
        if (self.text == nil || self.text.length == 0) {
            
            return;
        }
        
        if ([[[UIDevice currentDevice] systemVersion] compare:@"7.0" options:NSNumericSearch] != NSOrderedAscending) {
            
            [self drawTextInRectForIOS7:rect];
            
        } else {
            
            [self drawTextInRectForIOS6:rect];
        }
    }
    
    @end
    //
    //  ViewController.m
    //  FBGlowLabel
    //
    //  Created by YouXianMing on 16/8/3.
    //  Copyright © 2016年 YouXianMing. All rights reserved.
    //
    
    #import "ViewController.h"
    #import "FBGlowLabel.h"
    
    @interface ViewController ()
    
    @end
    
    @implementation ViewController
    
    - (void)viewDidLoad {
        
        [super viewDidLoad];
        
        self.view.backgroundColor = [UIColor blackColor];
        
        FBGlowLabel *glowLabel    = [[FBGlowLabel alloc] initWithFrame:self.view.bounds];
        [self.view addSubview:glowLabel];
        
        glowLabel.text            = @"壹擊必殺";
        glowLabel.textAlignment   = NSTextAlignmentCenter;
        glowLabel.backgroundColor = [UIColor clearColor];
        glowLabel.font            = [UIFont fontWithName:@"Heiti SC" size:40.f];
        glowLabel.textColor       = [[UIColor cyanColor] colorWithAlphaComponent:0.95f];
        
        glowLabel.glowSize       = 6;
        glowLabel.glowColor      = [UIColor cyanColor];
        
        glowLabel.innerGlowSize  = 3;
        glowLabel.innerGlowColor = [[UIColor blackColor] colorWithAlphaComponent:0.25f];
    }
    
    @end
  • 相关阅读:
    Jupyter notebook添加Anaconda中的虚拟环境
    Django踩坑之在Django中创建项目时ImportError: No module named django.core
    Django踩坑之ExtendsNode: extends 'base/base.html'> must be the first tag in the template.
    git 中文文件名乱码
    Django开发过程中遇到的问题和解决方案
    Advanced pandas
    Pycomcad中的过滤机制及访问引用块内对象简述
    头大的一篇日志 细节总结 唐诗三百首
    UIBarItem 的设置
    MJExtension json快速解析
  • 原文地址:https://www.cnblogs.com/YouXianMing/p/5734141.html
Copyright © 2011-2022 走看看