山寨Facebook的Shimmer效果

说明

主要是用到了CAGradientLayer的特性来实现特效效果,因为时间有限,并没有进行封装,待后续改进.

效果

源码(源码没有进行封装,细节都没有处理,望见谅)

//
//  FadeString.h
//  FadeWords
//
//  Created by YouXianMing on 15/5/7.
//  Copyright (c) 2015年 YouXianMing. All rights reserved.
//

#import <UIKit/UIKit.h>

@interface FadeString : UIView

/**
 *  输入文本
 */
@property (nonatomic, strong) NSString *text;

/**
 *  向右渐变消失
 */
- (void)fadeRight;

@end
//
//  FadeString.m
//  FadeWords
//
//  Created by YouXianMing on 15/5/7.
//  Copyright (c) 2015年 YouXianMing. All rights reserved.
//

#import "FadeString.h"

@interface FadeString ()

@property (nonatomic, strong) UILabel *label;
@property (nonatomic, strong) UILabel *backLabel;
@property (nonatomic, strong) UIView  *mask;  // 作为遮罩的mask

@end

@implementation FadeString

- (instancetype)initWithFrame:(CGRect)frame {
    self = [super initWithFrame:frame];
    if (self) {

        // 创建出label
        [self createLabel:self.bounds];

        // 创建出mask
        [self createMask:self.bounds];

    }
    return self;
}

- (void)createLabel:(CGRect)frame {
    self.label               = [[UILabel alloc] initWithFrame:frame];
    self.label.font          = [UIFont fontWithName:@"AvenirNext-ULtraLight" size:45.f];
    self.label.textAlignment = NSTextAlignmentCenter;
    self.label.textColor     = [[UIColor cyanColor] colorWithAlphaComponent:0.5f];

    [self addSubview:self.label];
}

- (void)createMask:(CGRect)frame {

    // 创建出渐变的layer
    CAGradientLayer *gradientLayer = [CAGradientLayer layer];
    gradientLayer.frame            = frame;
    gradientLayer.colors           = @[(__bridge id)[UIColor clearColor].CGColor,
                                       (__bridge id)[UIColor blackColor].CGColor,
                                       (__bridge id)[UIColor blackColor].CGColor,
                                       (__bridge id)[UIColor clearColor].CGColor];
    gradientLayer.locations        = @[@(0.01), @(0.2), @(0.4), @(0.59)];
    gradientLayer.startPoint       = CGPointMake(0, 0);
    gradientLayer.endPoint         = CGPointMake(1, 0);

    // 创建并接管mask
    self.mask     = [[UIView alloc] initWithFrame:frame];

    // mask获取渐变layer
    [self.mask.layer addSublayer:gradientLayer];

    CGRect newFrame    = self.mask.frame;
    newFrame.origin.x -= 200;
    self.mask.frame    = newFrame;

    self.maskView = self.mask;
}

- (void)fadeRight {

    [UIView animateWithDuration:5.f animations:^{
        CGRect frame    = self.mask.frame;
        frame.origin.x += (frame.size.width + 400);

        self.mask.frame = frame;
    }];

}

/**
 *  重写setter,getter方法
 */
@synthesize text = _text;
- (void)setText:(NSString *)text {
    _text           = text;
    self.label.text = text;
}
- (NSString *)text {
    return _text;
}

@end
//
//  ViewController.m
//  FadeWords
//
//  Created by YouXianMing on 15/5/7.
//  Copyright (c) 2015年 YouXianMing. All rights reserved.
//

#import "ViewController.h"
#import "FadeString.h"

@interface ViewController ()

@property (nonatomic, strong) UILabel    *label;
@property (nonatomic, strong) FadeString *fadeString;

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];

    self.view.backgroundColor = [UIColor blackColor];

    self.label               = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 300, 70)];
    self.label.font          = [UIFont fontWithName:@"AvenirNext-ULtraLight" size:45.f];
    self.label.center        = self.view.center;
    self.label.textAlignment = NSTextAlignmentCenter;
    self.label.textColor     = [UIColor grayColor];
    self.label.text          = @"YouXianMing";
    [self.view addSubview:self.label];

    // 创建FadeString
    self.fadeString             = [[FadeString alloc] initWithFrame:CGRectMake(0, 0, 300, 70)];
    self.fadeString.text        = @"YouXianMing";
    self.fadeString.center      = self.view.center;
    [self.view addSubview:self.fadeString];

    [self performSelector:@selector(run)
               withObject:nil
               afterDelay:4.f];
}

- (void)run {
    // 执行动画效果
    [self.fadeString fadeRight];
}

@end

关键的设置

时间: 2024-10-12 03:44:09

山寨Facebook的Shimmer效果的相关文章

Android闪闪发光字体Shimmer效果

Shimmer是一款可以实现字体的闪闪发光加载效果的工具,本来是针对iOS开发实现,现在有朋友做成了安卓版本,实现的核心部分是使用线性渐变LinearGradient,然后绘图的时候不断将渐变平移来达到闪动的效果,平移量的控制使用了属性动画. 下载地址:http://www.devstore.cn/code/info/897.html 运行截图:

&lt;转&gt;如何在iOS 7中设置barTintColor实现类似网易和 Facebook 的 navigationBar 效果

转自:i‘m Allen的博客 先给代码:https://github.com/allenhsu/CRNavigationController 1. 问题的表现 相信很多人在 iOS 7 的适配过程中遇到了类似这样的问题.当你试图通过设置 navigationBar.barTintColor 的时候,你陷入了一个两难的困境,假设你的预期是这样的: 设计稿 但当 navigationBar.translucent 为 YES 时,你的 navigationBar 看起来可能是这样的: 实际情况 最

山寨凤凰新闻菜单效果

效果图: 山寨来源: LiveScaleLabel.h 与 LiveScaleLabel.m // // LiveScaleLabel.h // ShowLabel // // Created by XianMingYou on 15/1/26. // Copyright (c) 2015年 XianMingYou. All rights reserved. // #import <UIKit/UIKit.h> @interface LiveScaleLabel : UIView @prope

Android开发--Facebook酷炫开源库Shimmer使用

今天在上网的时候无意间看到了Facebook的Shimmer开源库,感觉很是酷炫,而且使用超方便,决定给大家介绍一下.Shimmer是Facebook提供的一项基于Java的library,它可以使Android中的所有View控件具有闪光的效果.该项目的GitHub项目托管地址,请猛戳https://github.com/facebook/shimmer-android 使用Shimmer 配置工程 首先,我们在GitHub上将该项目clone到本地: 接下来我们在Android studio

android源码大放送(实战开发必备),免费安卓demo源码,例子大全文件详细列表

免费安卓demo源码,例子大全文件详细列表 本列表源码永久免费下载地址:http://www.jiandaima.com/blog/android-demo 卷 yunpan 的文件夹 PATH 列表 卷序列号为 0000-73EC E:. │ jiandaima.com文件列表生成.bat │ 例子大全说明.txt │ 本例子永久更新地址~.url │ 目录列表2016.03.10更新.txt │ ├─前台界面 │ ├─3D标签云卡片热门 │ │ Android TagCloudView云标签

github优秀开源项目大全-iOS

github优秀开源项目大全-iOS APR 25TH, 2014 前言 本文旨在搜集github上优秀的开源项目 本文搜集的项目都是用于iOS开发 本文会持续更新… 完整客户端 ioctocat github的iOS客户端,目前开源代码是V1版本,V2版本在appstore上可以下载 ChatSecure-iOS 使用XMPP协议的IM开源软件,很强大,在appstore上可以下载 SegmentFault SegmentFault的官方iOS客户端 OSChina-iOS 开源中国社区osc

[翻译] DXPopover

DXPopover A Popover mimic Facebook app popover using UIKit. 使用UIKit框架写了一个类似于Facebook的pop效果的动画. The concept of this popover is very simple: add your contentView in a popover, then show the popover in the container view. 这个popver的使用非常简单:将你的view添加到popov

内存分配器 (Memory Allocator)

对于大多数开发者而言,系统的内存分配就是一个黑盒子,就是几个API的调用.有你就给我,没有我就想别的办法.来UC前,我就是这样认为的.实际深入进去时,才发现这个领域里也是百家争鸣,非常热闹.有操作系统层面的内存分配器(Memory Allocator),有应用程序层面的,有为实时系统设计的,有为服务程序设计的.但他们的目的确认一样的,平衡内存分配的性能和提高内存使用的效率. 从浏览器开发的角度看,手机内存的增长速度相对于网页内容的增长仍然只是温暖水平,像Android这样的用内存大户更要算计着用

程序员的编程能力层次模型

编程技能层次 编程技能层次,指的程序员设计和编写程序的能力.这是程序员的根本. 0段—非程序员: 初学编程者,遇到问题,完全是懵懵懂懂,不知道该怎么编程解决问题.也就是说,还是门外汉,还不能称之为“程序员”.计算机在他面前还是一个神秘的黑匣子. 1段—基础程序员: 学习过一段时间编程后,接到任务,可以编写程序完成任务. 编写出来的代码,正常情况下是能够工作的,但在实际运行中,碰到一些特殊条件就会出现各类BUG.也就是说,具备了开发Demo软件的能力,但开发的软件真正交付给客户使用,恐怕会被客户骂