你的位置:首页 > 操作系统

[操作系统]一个裁剪图片的小工具类,通过一句代码调用


前些时间空闲,写了个简单的小小工具类,即图片的裁剪,动画改变frame隐藏;

本类直接提供一个类方法调用,传入3个参数即可,代码非常简单,谁都可以看懂;

参数说明:

第一个参数:你要将裁剪后的图片添加到哪个视图上执行动画,传入当前view即可;

第二个参数:传入一张你要进行裁剪的图片;

第三个参数:背景图,可以添加一张背景(如预览图),不需要可以不传,给一个空格字符串即可.如:@" ";

但不要传 nil ,否则控制台会输出如下图的莫名其妙的语句;

预览图效果:

 

以下是功能实现代码:

- YYClipImageTool.h

 1 // 2 // YYClipImageTool.h 3 // YYClipImageDemo 4 // 5 // Created by Arvin on 15/12/22. 6 // Copyright © 2015年 Arvin. All rights reserved. 7 // 8  9 #import <UIKit/UIKit.h>10 11 @interface YYClipImageTool : UIImageView12 /**!13  * @param view      要添加到的当前View14  * @param image      要进行裁剪的图片15  * @param backgroundImage 可以设置背景图片16 */17 + (void)addToCurrentView:(UIView *)view clipImage:(UIImage *)image backgroundImage:(NSString *)backgroundImage;18 19 @end

- YYClipImageTool.m

 1 // 2 // YYClipImageTool.m 3 // YYClipImageDemo 4 // 5 // Created by Arvin on 15/12/22. 6 // Copyright © 2015年 Arvin. All rights reserved. 7 // 8  9 #import "YYClipImageTool.h"10 11 #define Width view.frame.size.width12 #define Height view.frame.size.height13 #define imageW image.size.width14 #define imageH image.size.height * 0.515 #define duration 1.0f // 动画持续时间16 17 @interface YYClipImageTool ()18 19 @end20 21 @implementation YYClipImageTool22 23 + (void)addToCurrentView:(UIView *)view clipImage:(UIImage *)image backgroundImage:(NSString *)backgroundImage {24   25   // 上半部26   UIImageView *topImgView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, Width, Height * 0.5)];27   topImgView.image = [self clipImage:image withRect:CGRectMake(0, 0, imageW, imageH)];28   29   // 下半部30   UIImageView *bottomImgView = [[UIImageView alloc] initWithFrame:CGRectMake(0, Height * 0.5, Width, Height * 0.5)];31   bottomImgView.image = [self clipImage:image withRect:CGRectMake(0, imageH, imageW, imageH)];32   33   // 延时操作34   dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2.5f * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{35     // 执行动画36     [UIView animateWithDuration:duration animations:^{37       CGRect topRect = topImgView.frame;38       topRect.origin.y -= imageH;39       topImgView.frame = topRect;40       41       CGRect bottomRect = bottomImgView.frame;42       bottomRect.origin.y += imageH;43       bottomImgView.frame = bottomRect;44     }];45   });46   47   // 背景图48   UIImageView *bgImage = [[UIImageView alloc] initWithFrame:view.bounds];49   bgImage.image = [UIImage imageNamed:backgroundImage];50   51   // 添加到视图52   [view addSubview:bgImage];53   [view addSubview:topImgView];54   [view addSubview:bottomImgView];55 }56 57 // 返回裁剪后的图片58 + (UIImage *)clipImage:(UIImage *)image withRect:(CGRect)rect {59   CGRect clipFrame = rect;60   CGImageRef refImage = CGImageCreateWithImageInRect(image.CGImage, clipFrame);61   UIImage *newImage = [UIImage imageWithCGImage:refImage];62   CGImageRelease(refImage);63   return newImage;64 }65 66 /*67  // Only override drawRect: if you perform custom drawing.68  // An empty implementation adversely affects performance during animation.69  - (void)drawRect:(CGRect)rect {70  // Drawing code71  }72 */73 74 @end

本例在 viewController.m 中调用,代码如下:

 1 // 2 // ViewController.m 3 // YYClipImageDemo 4 // 5 // Created by Arvin on 15/12/22. 6 // Copyright © 2015年 Arvin. All rights reserved. 7 // 8  9 #import "ViewController.h"10 #import "YYClipImageTool.h"11 12 @interface ViewController ()13 14 @end15 16 @implementation ViewController17 18 - (void)viewDidLoad {19   [super viewDidLoad];20   // Do any additional setup after loading the view, typically from a nib.21   22   UIImage *image = [UIImage imageNamed:@"Default_image"];23   [YYClipImageTool addToCurrentView:self.view clipImage:image backgroundImage:@"bgImage"];24 }25 26 - (void)didReceiveMemoryWarning {27   [super didReceiveMemoryWarning];28   // Dispose of any resources that can be recreated.29 }30 31 - (BOOL)prefersStatusBarHidden {32   return YES;33 }34 35 @end

END! 欢迎留言交流,一起学习...