iOS动画——辉光效果(Label)

来源:互联网 发布:西游之路升阶数据 编辑:程序博客网 时间:2024/06/10 04:38



     一,  效果图如下:




     二, 代码如下

     

    FBGlowLabel.h

    

#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


#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




     三,使用方式

   

 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 redColor] colorWithAlphaComponent:0.95f];        glowLabel.glowSize       = 6;    glowLabel.glowColor      = [UIColor cyanColor];        glowLabel.innerGlowSize  = 3;    glowLabel.innerGlowColor = [[UIColor blackColor] colorWithAlphaComponent:0.25f];                FBGlowLabel *glowLabel2    = [[FBGlowLabel alloc] initWithFrame:CGRectMake(50, 500, 300, 40)];    [self.view addSubview:glowLabel2];        glowLabel2.text            = @"iOS开发 刘成利";    glowLabel2.textAlignment   = NSTextAlignmentCenter;    glowLabel2.backgroundColor = [UIColor clearColor];    glowLabel2.font            = [UIFont fontWithName:@"Heiti SC" size:40.f];    glowLabel2.textColor       = [[UIColor cyanColor] colorWithAlphaComponent:0.95f];        glowLabel2.glowSize       = 6;    glowLabel2.glowColor      = [UIColor cyanColor];        glowLabel2.innerGlowSize  = 3;    glowLabel2.innerGlowColor = [[UIColor blackColor] colorWithAlphaComponent:0.25f];

0 0
原创粉丝点击