动态将彩色图片动画过渡到黑白图片的BlackAndWhiteView
动态将彩色图片动画过渡到黑白图片的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的更多相关文章
- 15款css3鼠标悬停图片动画过渡特效
分享15款css3鼠标悬停图片动画过渡特效.这是一款15款不同效果的css3 hover动画过渡效果代码.效果图如下: 在线预览 源码下载 实现的代码. html代码: <div class ...
- CSS3实现鼠标移动到图片上图片变大(缓慢变大,有过渡效果,放大的过程是有动画过渡的,这个过渡的时间可以自定义)
转载自:http://blog.csdn.net/u014175572/article/details/51535768 CSS3的transform:scale()可以实现按比例放大或者缩小功能. ...
- 使用 CSS3 动画实现的 3D 图片过渡特效
这是一个基于 CSS3 动画实现的图片过渡效果,共有 Flip.Rotation.Multi-flip.Cube.Unfold 等6种效果,它们将证明 CSS3 Transform 和 Transit ...
- Core Animation一些Demo总结 (动态切换图片、大转盘、图片折叠、进度条等动画效果)
前一篇总结了Core Animation的一些基础知识,这一篇主要是Core Animation 的一些应用,涉及到CAShapeLayer.CAReplicatorLayer等图层的知识. 先看效果 ...
- android 帧动画的实现及图片过多时OOM解决方案(一)
一,animation_list.xml中静态配置帧动画的顺序,如下: <?xml version="1.0" encoding="utf-8"?> ...
- 10款让人惊叹的HTML5/jQuery图片动画特效
1.HTML5相册照片浏览器 可连接Flickr照片服务 以前我们经常会分享一些jQuery相册浏览插件,效果不错,实用性也很强.不过如果能利用HTML5来实现相册浏览器,那么相册浏览效果肯定会更加炫 ...
- iOS 用Swipe手势和动画实现循环播放图片
主要想法 添加3个ImageView展示图片,实现图片的无限循环. 使用Swipe手势识别用户向右或向左滑动图片. 使用CATransition给ImageView.layer添加动画,展示图片更换的 ...
- 玩转Bootstrap(JS插件篇)-第1章 模态弹出框 :1-2 动画过渡
动画过渡(Transitions) 这一小节我们先来讲“动画过渡(Transitions)”这个插件的使用,源文件:transition.js Bootstrap框架默认给各个组件提供了基本动画的过渡 ...
- iOS中图片动画的三种模式及基本的代码实现
-(void)play { //第一种图片动画模式 头尾方式 //头尾方式 [UIView beginAnimations:nil context:nil];//动画开始 [UIView setAni ...
随机推荐
- Python的Django框架中forms表单类的使用方法详解
用户表单是Web端的一项基本功能,大而全的Django框架中自然带有现成的基础form对象,本文就Python的Django框架中forms表单类的使用方法详解. Form表单的功能 自动生成HTML ...
- LDA理解
LDA只是一个求解思路. 1.理解LDA首先要理解EM算法,EM不能叫做一个算法,只是一个思想:它要求解的其实是一个极大似然估计,就是我用已知量去求解导致这个已知量出现的最大概率,而在这里又恰恰有点偏 ...
- 常见的接口与类 -- Comparable
目录 1. 接口概述 2. 接口方法详读 3. 接口方法的实践操作 3.1 String和Integer对于compareTo()的实现 正文 接口Comparable 我们在字符串中见到过Comp ...
- Linux的用户(组),权限,文件精妙的三角关系,和强大的帮助系统
在linux中一切都是文件(文件夹和硬件外设是特殊的文件),如果有可能尽量使用文本文件.文本文件是人和机器能理解的文件,也成为人和机器进行 交流的最好途径.由于所有的配置文件都是文本,所以你只需要一个 ...
- Spring Framework’s WebDataBinder
Last week, I was just outside our nation’s capital teaching Spring Web MVC Framework to a wonderful ...
- 2<<3=?
public static void main(String[] args) { // TODO Auto-generated method stub System.out.println(" ...
- 网页3D效果库Three.js学习[二]-了解照相机
camera 上篇大致了解了three.js ,并可以创建一个简单的可动的立方体.下来我们着重了解下camera (照相机),照相机其实就是视角,就像你的眼睛.Three.js有两种不同的相机模式:直 ...
- [转]Extending the User Interface in Outlook 2010
本文转自:https://msdn.microsoft.com/en-us/library/office/ee692172%28v=office.14%29.aspx#OfficeOLExtendin ...
- ADO调用分页查询存储过程
一.分页存储过程 ----------使用存储过程编写一个分页查询----------------------- set nocount off --关闭SqlServer消息 --set nocou ...
- nuget.org 无法加载源 https://api.nuget.org/v3/index.json 的服务索引
今天添加新项目想添加几个工具包,打开NuGet就这样了 发生错误如下: [nuget.org] 无法加载源 https://api.nuget.org/v3/index.json 的服务索引. 响应 ...