支持辉光效果的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
时间: 2024-10-06 07:17:12

支持辉光效果的Label的相关文章

使用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" #i

iOS 开发 - 绘制辉光效果

如何使曲线有辉光(荧光?)效果(glow)? 试了各种方法,最终有一点效果,觉得值得记录一下,如下. 1.最开始,我想是不是用shadow可以实现,事实证明,shadow 太淡,不醒目,如果多次shadow叠加,可加重一点,但性能不好,放弃: 2.然后想是不是可以用图片沿着path绘制,结果效果也不理想(也许是图片做的不好),性能也不好 3.Spritekit 中 skshapenode 可以设置辉光,而且可以设置用texture绘制,貌似可以解决问题,但是当线段之间夹角太小时,结合部位的辉光可

CSS3实现文字扫光效果

本篇文章由:http://xinpure.com/css3-text-light-sweep-effect/ CSS3 实现的文字扫光效果,几乎可以和 Flash 相媲美了 效果解析 我们分析一下实现这个效果需要实现的功能: 实现一个扫光背景块,因为光是移动的,所以要加入渐变效果 (例如: 手电筒照射的一小块区域) 将扫光背景块控制到文本上 (即实现文本背景) 实现扫光动画 (扫光块从左往右循环移动) 思路理清了,接下来就是一步一步实现了 背景渐变 -webkit-linear-gradient

Unity3d之遛光效果

所谓遛光效果,如一个图片上一条刀光从左闪到右边,以下为实现代码: c#代码: using System; using UnityEngine; public class WalkLightEffect : MonoBehaviour { public Texture MainTex; public Texture LightTex; public float Duration; public float LightULen; public Vector2 Size; bool m_play; f

如何让元素支持 height:100%效果

如何让元素支持 height:100%效果? 有两种方法.(1) 设定显式的高度值. 这个没什么好说的,例如,设置 height:600px,或者可以生效的百分比值高度.例如,我们比较常见的:html, body {height: 100%;}(2) 使用绝对定位. 例如:div {height: 100%;position: absolute;}此时的 height:100%就会有计算值,即使祖先元素的 height 计算为 auto 也是如此.需要注意的是,绝对定位元素的百分比计算和非绝对定

Shimmer辉光动画效果

效果 源码 https://github.com/facebook/Shimmer https://github.com/YouXianMing/Animations // // ShimmerController.m // Animations // // Created by YouXianMing on 15/12/18. // Copyright © 2015年 YouXianMing. All rights reserved. // #import "ShimmerController

辉光UIView的category

本人视频教程系类   iOS中CALayer的使用 效果如下: 源码: UIView+GlowView.h 与 UIView+GlowView.m // // UIView+GlowView.h // YouXianClock // // Created by YouXianMing on 14-12-21. // Copyright (c) 2014年 YouXianMing. All rights reserved. // #import <UIKit/UIKit.h> @interfac

刀光效果

今天的成果,模型来自DMC鬼泣,没有用unity的拖尾 球形插值的刀光mesh,效果不会太硬 非球形插值的刀光mesh 没有附加材质,纯扭曲的刀光shader 有时间还需要修改..

支持添加文字效果或点击事件功能

源码WPAttributedMarkup, WPAttributedMarkup能给Label中某关键字添加文字效果或点击事件.Label中的某个关键字词可以改变字体的特性如颜色.加粗,下划线等,也可以为某个关键字词添加点击事件.<ignore_js_op> 使用方法: 通过创建不同的style的字典后就可以对label的属性进行设置,示例如下: // Example using fonts and colours NSDictionary* style1 = @{@"body&qu