1. 程式人生 > >iOS 自定義手勢

iOS 自定義手勢

下面是實踐過後總結的具體步驟,例子程式碼實現了一個一橫一豎畫一個十字的手勢:

首先建立UIGestureRecognizer的子類。

#import <UIKit/UIKit.h>

@interface CustomTouch2: UIGestureRecognizer

@end


.m檔案import UIGestureRecognizerSubclass.h

#import <UIKit/UIGestureRecognizerSubclass.h>


.m中實現

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event;

- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event;

- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event;

- (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event;

其中,

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event;

中可能需要實現記錄手勢的起始位置的操作

- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event;

中可能要實現一些檢查,當手勢動作達到設定位置時觸發手勢回撥方法,在這裡需要設定stateUIGestureRecognizerStateEnded

    if (self.state == UIGestureRecognizerStatePossible) {

        [self setState:UIGestureRecognizerStateEnded];

    }

另外,viewController中要對對應的View新增 addGestureRecognizer 

- (void)viewDidLoad {

    [superviewDidLoad];

CustomTouch2

  *customTouch = [[CustomTouch2alloc] initWithTarget:selfaction:@selector(handleTouch:)];

    [self.viewaddGestureRecognizer:customTouch];

}

- (void) handleTouch:(UIRotationGestureRecognizer*) recognizer

{

NSLog(@"你觸發的手勢");

}


下面是我實現的一個十字手勢的程式碼:

#import "CustomTouch2.h"

#import <UIKit/UIGestureRecognizerSubclass.h>

@interface CustomTouch2()

{

     CGPoint curTickleStart;

    BOOL arriveFirstPoint;

    BOOL arriveLastPoint;

}

@end

static int touchTimes = 0;

@implementation CustomTouch2

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event

{

    UITouch * touch = [touches anyObject];

    curTickleStart = [touch locationInView:self.view];

}

- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event

{

    UITouch * touch = [touches anyObject];

    CGPoint ticklePoint = [touch locationInView:self.view];

    CGFloat horizontal = ticklePoint.x - curTickleStart.x;

    CGFloat vertical = ticklePoint.y - curTickleStart.y;

    if (!arriveFirstPoint &&  vertical >= 50 && (horizontal <= 10 || horizontal >= -10)) {

        arriveFirstPoint = YES;

            touchTimes ++;

    }

    if (arriveFirstPoint && (vertical <= 10 || vertical >= -10) && horizontal >= 50){

        arriveLastPoint = YES;

            touchTimes ++;

    }

    if (touchTimes == 2 && self.state == UIGestureRecognizerStatePossible ) {

        [self setState:UIGestureRecognizerStateEnded];

        touchTimes = 0;

        arriveFirstPoint = NO;

    }

}

- (void)reset {

    curTickleStart = CGPointZero;

    if (self.state == UIGestureRecognizerStatePossible) {

        [self setState:UIGestureRecognizerStateFailed];

    }

}

- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event

{

    [self reset];

}

- (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event

{

    [self reset];

}

@end


相關推薦

iOS 定義手勢

下面是實踐過後總結的具體步驟,例子程式碼實現了一個一橫一豎畫一個十字的手勢: 首先建立UIGestureRecognizer的子類。 #import <UIKit/UIKit.h> @interface CustomTouch2: UIGestureR

iOS手勢識別的詳細使用(拖動,縮放,旋轉,點選,手勢依賴,定義手勢)

1、UIGestureRecognizer介紹手勢識別在iOS上非常重要,手勢操作移動裝置的重要特徵,極大的增加了移動裝置使用便捷性。iOS系統在3.2以後,為方便開發這使用一些常用的手勢,提供了UIGestureRecognizer類。手勢識別UIGestureRecogn

iOS 定義返回鍵後手勢返回失效

在現在的APP開發中,產品和UI一般都會拋棄iOS系統的返回鍵,使用自己定義的圖片。但是自定義返回按鈕之後,iOS系統自帶的手勢返回事件就失效了,需要我們手動設定一下代理:1.如果自定製了 UINavigationController在這個類中,遵循 <UIGestur

ios定義返回按鈕後沒有滑動返回手勢處理方法

A push B push C在C中不需要加以下程式碼 在A檢視中增加下面程式碼 -(void)viewDidAppear:(BOOL)animated{ [super viewDidApp

iOS開發之定義手勢

iOS為手指觸碰事件提供了手勢處理器,通過手勢處理器可使用一致的變成模式來處理各種觸碰事件,而且變成更加簡單,因此一般推薦使用者使用手勢來處理使用者的觸碰事件。無論處理哪種手勢,都可面向UIGestureRecognizer程式設計,UIGestureRecognizer提

ios 定義返回按鈕時,如何新增手勢返回

在父檢視上加上如下程式碼: self.navigationItem.hidesBackButton = YES;  self.navigationController.interactivePopGestureRecognizer.delegate = self;  sel

iOS 定義導航欄pop返回手勢,全屏右滑返回

- (void)viewDidLoad {     [superviewDidLoad]; //重新給interactivePopGestureRecognizer.delegate掛代理

iOS定義轉場動畫(4)——定義模態跳轉之dismiss與手勢驅動

Dismiss 效果: 1、新建PresentTransition繼承NSObject,並在.h中遵守UIViewControllerAnimatedTransitioning協議。 2、實現協議的兩個方法,並在其中編寫 Push 的動畫。類似Pr

iOS 手勢重疊 iOS系統手勢定義手勢重疊, 手勢衝突

.m檔案 UIPanGestureRecognizer *swipe = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(clickSwipe:)];    swipe.delegate = self;    [

ios 定義鍵盤的return鍵以及鍵盤的其他一些屬性

variable 位置 arch ext ddr gin character 觸發 hone //初始化textfield並設置位置及大小 UITextField *text = [[UITextField alloc]initWithFrame:CGRectMake(20

IOS 定義按鈕(代碼實現)+九宮格

uifont 排列 end uiview height iyu void rec name 在一些下載應用裏整個頁面都是按鈕,有好多好多,但是仔細觀察不難發現他們很有規律。就像下面一樣?? 很有規律的排列在屏幕上,那麽這需要我們怎麽去做能。 正如標題,我們需要了解兩個知

iOS定義一些提示控件

mat cat get -1 from start mask ins sel 代碼如下: .h中的代碼: // // HKUIToolsView.h // HKUIToolsDemo // // Created by isHakan on 2017/7/28

iOS - 定義 iPhone 鈴聲

mar 資料庫 phone 右鍵 還需要 到手 文件名 頁面 fin 1、iPhone 鈴聲格式 iPhone 的來電鈴聲時長限制為 40 秒,短信鈴聲時長限制為 25 秒,且 iOS5 及以上的系統才支持 m4r 格式的短信鈴聲。 2、自定義 iPhone 鈴聲 1

iOS定義控制元件-UISearchBar

   在開發過程中,UISearchBar屬不多見的控制元件,在我們一般使用的是系統原生樣式:    但是UI設計師可能想要的是這種:    可能你覺得很簡單:覺得設定背景顏色,邊框圖示什麼的;

iOS定義協議中的byte使用

自定義的簡單協議一般包括訊息頭部,訊息碼,訊息體,校驗碼和尾部,一個專案裡面用到的頭部和尾部一般都是固定的,訊息碼用來標識是哪一條訊息,校驗碼用來校驗資料完整性 在一些需要相容多端的開發的時候,可能會遇到使用自定義協議,比如與硬體通訊或者使用socket的時候,接受的資料是按約定

ios定義日期、時間、城市選擇器

選擇器,我想大家都不陌生,當需要使用者去選擇某些範圍值內的一個固定值時,我們會採用選擇器的方式。選擇器可以直觀的提示使用者選擇的值範圍、統一資訊的填寫格式,同時也方便使用者快速的進行選擇,比如對於性別,正常情況下就只有男女兩種情況,那這時候用一個選擇器給使用者進行選擇的話,可以避免錯誤資料的輸入,也更方便使用

iOS定義tabbar(沒有tabbar上的黑線)

自定義tabbar相信在很多專案中都要用到。有的時候 還需要那種 不規則的tabbar,例如中間高兩邊底,例如需要新增tabbar的背景圖片等等。這裡 我要介紹一種 自定義tabbar的方法 ,這種方法可以呼叫系統的 hidesBottomBarWhenPushed 方法,很方便的隱藏tab

iOS定義log並寫入檔案

前言 iOS開發中,很多情況需要使用到log列印,本文主要講解如何將列印寫入檔案,並且不影響控制檯的正常列印。 常見方法 NSString *documentDirectory = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSU

IOS 定義軟鍵盤功能,修改換行鍵為傳送鍵

IOS專案是使用混合模式開發,在開發聊天功能時;發現軟鍵盤不能像QQ、微信那樣,換行鍵不能變為傳送;網上說是因為輸入框類別導致;嘗試過以後,還是不行;然後想到用IOS native解決; 先說一下,原生APP 設定軟鍵盤換行鍵為傳送鍵: textField.returnKeyType = U

iOS定義任意解析度的Camera(包含example code)

說在前面 如果不想看文章,可以直接翻到最後,我已經把程式碼上傳到gist上,但這樣你會失去一個理解程式碼的機會。 概述 該文章會涉及到的概念包括: AVCaptureDeviceInput,AVCaptureVideoDataOutput,AVCaptureV