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


    前些时间空闲,写了个简单的小小工具类,即图片的裁剪,动画改变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! 欢迎留言交流,一起学习...

  • 相关阅读:
    使用IDEA打包出现“Cleaning up unclosed ZipFile for archive”错误
    Kafka读取本地文件作为生产者
    Redis连接池
    如果javaapi长时间消费不到数据
    Redis 持久化的两种方式
    kafka结合streaming的两种方式
    二分法查找
    shell脚本学习
    Md5Utils
    idea添加jar包
  • 原文地址:https://www.cnblogs.com/arvin-sir/p/5094445.html
Copyright © 2020-2023  润新知