iOS開發小功能之八:手勢的簡單使用(6種)以及代理方法

来源:http://www.cnblogs.com/hissia/archive/2016/05/01/5451216.html
-Advertisement-
Play Games

代碼: 代理方法: ...


註意:全部都是在UIView上操作手勢

代碼:

  1 #import "ViewController.h"
  2 @interface ViewController () <UIGestureRecognizerDelegate>
  4 @property (weak, nonatomic) IBOutlet UIImageView *imageView;
  5 @end
  7 @implementation ViewController
  8 - (void)viewDidLoad {
  9     [super viewDidLoad];
 10     //只要是手勢,預設都是相對於原來位置,且預設控制只支持一個手勢!!若想支持多個手勢,詳見下麵的代理方法
 11 //    [self setUpRotation];
 12 //    [self setUpPinch];
 13     [self setUpPan];
 14 }
 15 
 16 #pragma mark - 點按手勢
 17 - (void)setUpTap
 18 {
 19     //創建點按手勢
 20     UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tap:)];
 21     //需要連續點3次才能觸發
 22     //    tap.numberOfTapsRequired = 3;
 23     //往imageView上添加點按手勢
 24     [self.imageView addGestureRecognizer:tap];
 25     //設置點按手勢代理
 26     tap.delegate = self;
 27 }
 28 
 29 - (void)tap:(UITapGestureRecognizer *)tap
 30 {
 31     NSLog(@"%s",__func__);
 32 }
 33 
 34 #pragma mark - 長按手勢
 35 //預設觸發兩次(開始觸摸半秒後一次,結束觸摸一次)
 36 - (void)setUpLongPress
 37 {
 38     UILongPressGestureRecognizer *longPress = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(longPress:)];
 39     [self.imageView addGestureRecognizer:longPress];
 40     longPress.delegate = self;
 41 }
 42 
 43 - (void)longPress:(UILongPressGestureRecognizer *)longPress
 44 {
 45     開始的時候觸摸
 46     if (longPress.state == UIGestureRecognizerStateBegan) {
 47        NSLog(@"%s",__func__);
 48     }
 49     結束的時候觸摸
 50     if (longPress.state == UIGestureRecognizerStateEnded) {
 51         NSLog(@"%s",__func__);
 52     }
 53 }
 54 
 55 #pragma mark - 輕掃手勢
 56 - (void)setUpSwipe
 57 {
 58     //預設輕掃手勢往右劃屏幕
 59     UISwipeGestureRecognizer *swipeUp = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(swipe:)];
 60     //向上劃
 61     swipeUp.direction = UISwipeGestureRecognizerDirectionUp;
 62     [_imageView addGestureRecognizer:swipeUp];
 63     //一個清掃手勢只支持一個方向,如果想支持多個方向,必須創建多個
 64     UISwipeGestureRecognizer *swipeDown = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(swipe:)];
 65     //向下劃
 66     swipeDown.direction = UISwipeGestureRecognizerDirectionDown;
 67     [_imageView addGestureRecognizer:swipeDown];
 68 }
 69 - (void)swipe:(UISwipeGestureRecognizer *)swipe
 70 {
 71     NSLog(@"%s",__func__);
 72 }
 73 
 74 #pragma mark - 旋轉手勢
 75 //預設傳遞的角度都相對於最開始的位置
 76 - (void)setUpRotation
 77 {
 78     UIRotationGestureRecognizer *rotation = [[UIRotationGestureRecognizer alloc] initWithTarget:self action:@selector(rotation:)];
 79     rotation.delegate = self;
 80     [self.imageView addGestureRecognizer:rotation];
 81 }
 82 - (void)rotation:(UIRotationGestureRecognizer *)rotation
 83 {
 84     //讓圖片隨著手勢旋轉而旋轉,旋轉的角度相當於初始位置的值,配合rotation.rotation = 0;無法轉動
 85 //    self.imageView.transform = CGAffineTransformMakeRotation(rotation.rotation);
 86     //手勢旋轉一下能讓圖片高速旋轉N圈,並且不受控制,方向不容易確定。配合rotation.rotation = 0;後角度一直為0
 87     self.imageView.transform = CGAffineTransformRotate(self.imageView.transform, rotation.rotation);   
 88     //複位
 89     rotation.rotation = 0;
 90     //獲取手勢旋轉的角度
 91     NSLog(@"%f",rotation.rotation);
 92 }
 93 
 94 #pragma mark - 捏合手勢
 95 //兩根手指放大縮小圖片
 96 - (void)setUpPinch
 97 {
 98     UIPinchGestureRecognizer *pinch = [[UIPinchGestureRecognizer alloc] initWithTarget:self action:@selector(pinch:)];
 99     pinch.delegate = self;
100     [self.imageView addGestureRecognizer:pinch];
101 }
102 - (void)pinch:(UIPinchGestureRecognizer *)pinch
103 {
104     //放大的比例相對於原始點,註意:這個不能配合pinch.scale = 1使用,否則不能放大
105 //    self.imageView.transform = CGAffineTransformMakeScale(pinch.scale, pinch.scale);
106     //隨著兩手指的距離增大,圖片會無規則的迅速的放大或者縮小(此處無法控制放大還是縮小),註意:配合pinch.scale = 1使用會正常的放大和縮小
107     self.imageView.transform = CGAffineTransformScale(self.imageView.transform, pinch.scale, pinch.scale);
108     //複位
109     pinch.scale = 1;
110     NSLog(@"%f",pinch.scale);
111 }
112 
113 #pragma mark - 拖拽
114 //移動視圖
115 - (void)setUpPan
116 {
117     UIPanGestureRecognizer *pan = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(pan:)];
118     [self.imageView addGestureRecognizer:pan];
119 }
120 - (void)pan:(UIPanGestureRecognizer *)pan
121 {
122     //獲取手勢的移動,相對於原始點
123     CGPoint transP = [pan translationInView:self.imageView];
124     self.imageView.transform = CGAffineTransformTranslate(self.imageView.transform, transP.x, transP.y);
125     //複位
126     [pan setTranslation:CGPointZero inView:self.imageView];
127     NSLog(@"%@",NSStringFromCGPoint(transP));
128 }
129 @end

代理方法:

 1 是否允許同時支持多個手勢,預設只支持一個手勢,要調用此方法註意設置代理
 2 - (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer
 3 {
 4     return YES;
 5 }
 6 
 7 是否允許開始觸發手勢
 8 - (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer
 9 {
10     return NO;
11 }
12 
13 是否允許接收手機的觸摸(可以控制觸摸的範圍)
14 - (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch
15 {
16     //獲取當前的觸摸點
17     CGPoint currentP = [touch locationInView:self.imageView];
18       在圖片的左半區域可以接受觸摸
19     if (currentP.x < self.imageView.bounds.size.width * 0.5) {
20         return YES;
21     }else {
22         return NO;
23     }
24 }

 


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

-Advertisement-
Play Games
更多相關文章
  • 列表組可以用來製作列表清單、垂直導航等效果,也可以配合其他的組件製作出更漂亮的組件,列表組在bootstrap框架中也是一個獨立的組件,所以也對應有自己獨立源碼: LESS:list-group.less SASS:_list-group.scss 列表組看上去就是去掉了列表符號的列表項,並且配上一... ...
  • 學習要點: 1.佈局模型 2.表格佈局 3.浮動佈局 主講教師:李炎恢 本章主要探討 HTML5 中 CSS 早期所使用的傳統佈局,很多情況下,這些佈局方式還是非常有用的。 一.佈局模型 在早期沒有平板和智能手機等移動設備大行其道的時期,Web 頁面的設計主要是面向 PC 端電腦解析度展開的。這種分 ...
  • 學習要點: 1.動畫簡介 2.屬性詳解 3.簡寫和版本 主講教師:李炎恢 本章主要探討 HTML5 中 CSS3 的動畫效果,可以通過類似 Flash 那樣的關鍵幀模式控制運行。 一.動畫簡介 CSS3 提供了類似 Flash 關鍵幀控制的動畫效果,通過 animation 屬性實現。那麼之前的 t ...
  • 學習要點: 1.過渡簡介 2.transition-property 3.transition-duration 4.transition-timing-function 5.transition-delay 6.簡寫和版本 主講教師:李炎恢 本章主要探討 HTML5 中 CSS3 的過渡效果,通過 ...
  • 學習要點: 1.屬性初探 2.屬性解釋 3.簡寫和版本 主講教師:李炎恢 本章主要探討 HTML5 中 CSS3 中邊框圖片背景的效果,通過這個新屬性讓邊框更加的豐富多彩。 一.屬性解釋 CSS3 提供了一個新的屬性集合,用這幾個屬性可以嵌入圖片形式的邊框。這樣,邊框就可以自定義了。 學習要點: 1 ...
  • Markdown Notepad 如果給大家介紹一個Markdown編輯器不有什麼特點或差異, 真沒必要在這裡給大家推薦. 開始使用Markdown Notepad跟其他同品不一樣的地方在於: 多標簽可以同時打開多個文件、編輯和預覽 自動保存與恢復無需手工保存,即便關閉甚至終止瀏覽器也不會丟失數據 ...
  • 學習要點: 1.線性漸變 2.徑向漸變 主講教師:李炎恢 本章主要探討 HTML5 中 CSS3 背景漸變功能,主要有兩種漸變方式:線性漸變和徑向(放射性)漸變。 一.線性漸變 CSS3 提供了 linear-gradient 屬性實現背景顏色的漸變功能。在以前,這種效果必須採用圖片才能實現的。首先 ...
  • 學習要點: 1.文本陰影 2.文本裁剪 3.文本描邊 4.文本填充 主講教師:李炎恢 本章主要探討 HTML5 中 CSS3 中文本效果,其中也包含一些之前講過的 CSS3 文本屬性。 一.文本陰影 CSS3 提供了 text-shadow 文本陰影效果,這個屬性在之前講過,只是沒有涉及瀏覽器支持情 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...