一個裁剪圖片的小工具類,通過一句代碼調用

来源:http://www.cnblogs.com/arvin-sir/archive/2016/01/04/5094445.html
-Advertisement-
Play Games

前些時間空閑,寫了個簡單的小小工具類,即圖片的裁剪,動畫改變frame隱藏;本類直接提供一個類方法調用,傳入3個參數即可,代碼非常簡單,誰都可以看懂;參數說明:第一個參數:你要將裁剪後的圖片添加到哪個視圖上執行動畫,傳入當前view即可;第二個參數:傳入一張你要進行裁剪的圖片;第三個參數:背景圖,可...


前些時間空閑,寫了個簡單的小小工具類,即圖片的裁剪,動畫改變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! 歡迎留言交流,一起學習...


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 轉載請註明出處:http://www.cnblogs.com/titibili/p/5102035.html 謝謝~ 1、下載JDK並配置Java運行環境 http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2...
  • 下拉刷新------- 1.addHeaderView必須在setAdapter之前調用 2.將paddingTop設置一個headerView高度的負值去隱藏它 getHeight()和getMeasuredHeight()的區別: getMeasuredHeight():獲取測量完的高度,只要....
  • inten常見動作:MAIN_ACTION(主視圖)、 VIEW_ACTION(查看)、 EDIT_ACTION(修改)、 PICK_ACTION 、GET_CONTENT_ACTION(獲取內容)、 DIAL_ACTION 、CALL_ACTION 、SENDTO_ACTION、 ANSWER_A...
  • 這個特性是andorid4.4支持的,最少要api19才可以使用,也就是說如果Android的機子是低於4.4,沉浸通知欄是沒有效果的。下麵介紹一下使用的方法,非常得簡單。/** * 設置通知欄 這個方法在onCreate()實現,如果是在父類的onCreate()中添加,即使所有繼承了該父類都會....
  • //1、創建主線程(串列) dispatch_async(dispatch_get_main_queue(), ^{ //刷新界面代碼 }); //2、創建非同步線程(並行) dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORIT...
  • 一,效果圖。二,工程圖。三,代碼。RootViewController.h#import #import "SVSegmentedControl.h"@interface RootViewController : UIViewController{ UIScrollView *scrollVi...
  • //1.設置背景 //tf.backgroundColor = [[UIColor blueColor] colorWithAlphaComponent:0.7]; //2.設置輸入框的樣式 /* UITextBorderStyleNone, 預設樣式,無樣式 UITextBorder...
  • 前言:之前公司app在騰訊開放平臺認領應用時,涉及了一個問題:就是給空白包簽名。然後再上傳上去審核。騰訊開放平臺的官方說明如下,如何簽名:jarsgner-verbose-keystore[keystorePath]-singnedjar [apkOut] [apkln] [alias]jarsgn...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...