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

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

效果如下:

 BlackAndWhiteView.h 与 BlackAndWhiteView.m

//
//  BlackAndWhiteView.h
//  BlackAndWhiteView
//
//  Created by YouXianMing on 14-10-4.
//  Copyright (c) 2014年 YouXianMing. All rights reserved.
//

#import @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 = 0.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, 0), ^{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,8, // bits per component0,colorSpace,kCGBitmapByteOrderDefault);CGColorSpaceRelease(colorSpace);if (context == NULL) {return nil;}CGContextDrawImage(context,CGRectMake(0, 0, 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(0, 0,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:8];
}- (void)run
{[UIView animateWithDuration:2 animations:^{_blackView.blackAlpha = 1.f;}];
}@end

 


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部