动态将彩色图片动画过渡到黑白图片的BlackAndWhiteView

效果如下:

BlackAndWhiteView.h 与 BlackAndWhiteView.m

//
// BlackAndWhiteView.h
// BlackAndWhiteView
//
// Created by YouXianMing on 14-10-4.
// Copyright (c) 2014年 YouXianMing. All rights reserved.
// #import <UIKit/UIKit.h> @interface BlackAndWhiteView : UIView @property (nonatomic) float blackAlpha;
@property (nonatomic, strong) UIImage *image; - (void)startImageProcessing; @end
//
// BlackAndWhiteView.m
// BlackAndWhiteView
//
// Created by YouXianMing on 14-10-4.
// Copyright (c) 2014年 YouXianMing. All rights reserved.
// #import "BlackAndWhiteView.h" @interface BlackAndWhiteView () @property (nonatomic, strong) UIImageView *normalView;
@property (nonatomic, strong) UIImageView *blackView; @property (nonatomic, strong) UIImage *blackImage; @end @implementation BlackAndWhiteView - (instancetype)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
_normalView = [[UIImageView alloc] initWithFrame:self.bounds];
_blackView = [[UIImageView alloc] initWithFrame:self.bounds];
_blackView.alpha = .f; [self addSubview:_normalView];
[self addSubview:_blackView];
}
return self;
} - (void)startImageProcessing
{
if (_image) {
_normalView.image = _image; dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, ), ^{ if (_blackImage == nil) {
_blackImage = [self grayScale:_image];
} dispatch_async(dispatch_get_main_queue(), ^{
_blackView.image = _blackImage;
});
});
}
} #pragma mark - 私有方法
- (UIImage *)grayScale:(UIImage *)inputImage
{
int width = inputImage.size.width;
int height = inputImage.size.height; CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceGray(); CGContextRef context = CGBitmapContextCreate(nil,
width,
height,
, // bits per component
,
colorSpace,
kCGBitmapByteOrderDefault); CGColorSpaceRelease(colorSpace); if (context == NULL) {
return nil;
} CGContextDrawImage(context,
CGRectMake(, , width, height), inputImage.CGImage);
CGImageRef image = CGBitmapContextCreateImage(context);
UIImage *grayImage = [UIImage imageWithCGImage:image];
CFRelease(image);
CGContextRelease(context); return grayImage;
} #pragma mark - 重写setter方法
@synthesize blackAlpha = _blackAlpha;
- (void)setBlackAlpha:(float)blackAlpha
{
_blackAlpha = blackAlpha;
_blackView.alpha = blackAlpha;
} - (float)blackAlpha
{
return _blackAlpha;
} @end

使用的源码:

//
// ViewController.m
// BlackAndWhiteView
//
// Created by YouXianMing on 14-10-4.
// Copyright (c) 2014年 YouXianMing. All rights reserved.
// #import "ViewController.h"
#import "BlackAndWhiteView.h" @interface ViewController () @property (nonatomic, strong) BlackAndWhiteView *blackView; @end @implementation ViewController - (void)viewDidLoad {
[super viewDidLoad]; UIImage *image = [UIImage imageNamed:@"red.jpg"];
_blackView = [[BlackAndWhiteView alloc] initWithFrame:CGRectMake(, ,
image.size.width,
image.size.height)];
_blackView.image = image;
_blackView.center = self.view.center;
[_blackView startImageProcessing];
[self.view addSubview:_blackView]; [self performSelector:@selector(run) withObject:nil afterDelay:];
} - (void)run
{
[UIView animateWithDuration: animations:^{
_blackView.blackAlpha = .f;
}];
} @end

动态将彩色图片动画过渡到黑白图片的BlackAndWhiteView的更多相关文章

  1. 15款css3鼠标悬停图片动画过渡特效

    分享15款css3鼠标悬停图片动画过渡特效.这是一款15款不同效果的css3 hover动画过渡效果代码.效果图如下: 在线预览   源码下载 实现的代码. html代码: <div class ...

  2. CSS3实现鼠标移动到图片上图片变大(缓慢变大,有过渡效果,放大的过程是有动画过渡的,这个过渡的时间可以自定义)

    转载自:http://blog.csdn.net/u014175572/article/details/51535768 CSS3的transform:scale()可以实现按比例放大或者缩小功能. ...

  3. 使用 CSS3 动画实现的 3D 图片过渡特效

    这是一个基于 CSS3 动画实现的图片过渡效果,共有 Flip.Rotation.Multi-flip.Cube.Unfold 等6种效果,它们将证明 CSS3 Transform 和 Transit ...

  4. Core Animation一些Demo总结 (动态切换图片、大转盘、图片折叠、进度条等动画效果)

    前一篇总结了Core Animation的一些基础知识,这一篇主要是Core Animation 的一些应用,涉及到CAShapeLayer.CAReplicatorLayer等图层的知识. 先看效果 ...

  5. android 帧动画的实现及图片过多时OOM解决方案(一)

    一,animation_list.xml中静态配置帧动画的顺序,如下: <?xml version="1.0" encoding="utf-8"?> ...

  6. 10款让人惊叹的HTML5/jQuery图片动画特效

    1.HTML5相册照片浏览器 可连接Flickr照片服务 以前我们经常会分享一些jQuery相册浏览插件,效果不错,实用性也很强.不过如果能利用HTML5来实现相册浏览器,那么相册浏览效果肯定会更加炫 ...

  7. iOS 用Swipe手势和动画实现循环播放图片

    主要想法 添加3个ImageView展示图片,实现图片的无限循环. 使用Swipe手势识别用户向右或向左滑动图片. 使用CATransition给ImageView.layer添加动画,展示图片更换的 ...

  8. 玩转Bootstrap(JS插件篇)-第1章 模态弹出框 :1-2 动画过渡

    动画过渡(Transitions) 这一小节我们先来讲“动画过渡(Transitions)”这个插件的使用,源文件:transition.js Bootstrap框架默认给各个组件提供了基本动画的过渡 ...

  9. iOS中图片动画的三种模式及基本的代码实现

    -(void)play { //第一种图片动画模式 头尾方式 //头尾方式 [UIView beginAnimations:nil context:nil];//动画开始 [UIView setAni ...

随机推荐

  1. [LeetCode] Level Order Traversal

    题目说明 Given a binary tree, return the level order traversal of its nodes' values. (ie, from left to r ...

  2. java 拦截器、过滤器、监听器

    一.理解Struts2拦截器 1. Struts2拦截器是在访问某个Action或Action的某个方法,字段之前或之后实施拦截,并且Struts2拦截器是可插拔的,拦截器是AOP的一种实现. 2. ...

  3. DataTable的Ajax使用

    DataTable Datatables是一款jquery表格插件.它是一个高度灵活的工具,可以将任何HTML表格添加高级的交互功能. 官网: https://datatables.net/ 中文网: ...

  4. UOJ #356. 【JOI2017春季合宿】Port Facility

    Description 小M有两个本质不同的栈. 无聊的小M找来了n个玩具.之后小M把这n个玩具随机顺序加入某一个栈或把他们弹出. 现在小M告诉你每个玩具的入栈和出栈时间,现在她想考考小S,有多少种方 ...

  5. java linux ssh jar

    Ganymed SSH-2 for Java http://www.ganymed.ethz.ch/ssh2/ Ganymed SSH-2 for Java is a library which im ...

  6. 1Java开发环境

    1 下载      1.1 oracle官方网站 http://www.oracle.com/index.html      1.2 点击DOWNLOADS http://www.oracle.com ...

  7. 【解决】 无法打开包括文件:“windows.h”: No such file or directory

    vs编译时错误: 无法打开包括文件:“windows.h”: No such file or directory 出现这种错误什么都不用配置(环境变量),最好办法是将VS安装在C盘,让开发工具自动包含 ...

  8. MyEclipse中快速跳转到指定行号位置

    有时候我们希望能从当前编辑位置跳到指定行号的位置,可以使用Ctrl + l 快捷键. 其中 l 代表line.

  9. POJ 2773 Happy 2006------欧几里得 or 欧拉函数。

    Happy 2006 Time Limit: 3000MS   Memory Limit: 65536K Total Submissions: 8359   Accepted: 2737 Descri ...

  10. HDU 3501 Calculation 2------欧拉函数变形

    Calculation 2 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Tot ...