动态将彩色图片动画过渡到黑白图片的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
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
