欢迎访问移动开发之家(rcyd.net),关注移动开发教程。移动开发之家  移动开发问答|  每日更新
页面位置 : > > > 内容正文

一个裁剪图片的小工具类,通过一句代码调用,裁剪工具类

来源: 开发者 投稿于  被查看 536 次 评论:74

一个裁剪图片的小工具类,通过一句代码调用,裁剪工具类


前些时间空闲,写了个简单的小小工具类,即图片的裁剪,动画改变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 : UIImageView
12 /**!
13  *  @param view            要添加到的当前View
14  *  @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.width
12 #define Height view.frame.size.height
13 #define imageW image.size.width
14 #define imageH image.size.height * 0.5
15 #define duration 1.0f  // 动画持续时间
16 
17 @interface YYClipImageTool ()
18 
19 @end
20 
21 @implementation YYClipImageTool
22 
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 code
71  }
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 @end
15 
16 @implementation ViewController
17 
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! 欢迎留言交流,一起学习...

相关文章

    暂无相关文章

用户评论