多點觸控與手勢.

Slides:



Advertisements
Similar presentations
明新科技大學 資訊工程系 彭亦暄 台北科技大學 資訊工程系 江佩穎 教育部資通訊軟體創新人才推升推廣計畫 iOS 智慧裝置軟體設計 iOS 常用元件.
Advertisements

手动换页 域外风情系列 儿子去美国留学,毕业后定居美国。还给我找了 个洋媳妇苏珊。如今,小孙子托比已经 3 岁了。 今年夏天,儿子为我申请了探亲签证。在美国待 了三个月,洋媳妇苏珊教育孩子的方法,令我这 个中国婆婆大开眼界。
99學年度第1學期導師輔導工作座談會 全校性共同必修服務學習課程 報告單位:學務處領導知能與服務學習中心.
职业指导服务系统 欢迎了解职业指导服务系统!
生涯不卡關 ~生涯卡之簡介與實務應用 吳慧美.
第十一章 文獻資料分析法 M99E0202 吳孟樺.
第五章 电视手法与分镜头稿本 第一单元:电视摄像造型基础.
C语言程序设计 主讲教师 :张群燕 电话:
一百零一年溪口國小 學校日 班級: 三年三班 教師: 張慈麟.
一、平面点集 定义: x、y ---自变量,u ---因变量. 点集 E ---定义域, --- 值域.
校园信息管理系统 河北科技大学网络中心 2000/4/10.
朝陽國小學校課程發表簡報 活力四年級 導師:蔡于晨.
提高自身素质做好 新时期班主任工作 北京市广渠门中学 高金英.
关注热点 2014年天猫双十一成交总额 571亿 点亮217个国家地区
系統分析與設計 系級:資管三B 姓名:朱秋儒 學號:
普通话模拟测试 与学习平台 使用指南.
徵收苗栗市福全段147、1588及文心段10、11地號等4筆土地之
管理学基本知识.
網路小說劇情建構與伏線營造 Windows98.
讲 义 大家好!根据局领导的指示,在局会计科和各业务科室的安排下,我给各位简要介绍支付中心的工作职能和集中支付的业务流程。这样使我们之间沟通更融洽,便于我们为预算单位提供更优质的服务。 下面我主要从三方面介绍集中支付业务,一是网上支付系统,二是集中支付业务流程及规定等,
滁州学院首届微课程教学设计竞赛 课程名称:高等数学 主讲人:胡贝贝 数学与金融学院.
高等职业学校建筑设计类与艺术设计类专业骨干教师实践能力国家级培训
一言之辩强于九鼎之宝 三寸之舌胜于百万雄师
中国人民公安大学经费管理办法(试行) 第一章总则 第四条:“一支笔” “一支笔”--仅指单位主要负责人。负责对本 单位的经费进行审核审批。
第一部 认识篇 知己知彼 百战不殆.
Objective C介紹與MVC.
没有请柬该如何办 记者如何选取有利位置 着装 准备工作 提问时的注意事项
氣候變遷對南台灣降雨造成之影響 研究背景 結果與討論 研究方法 結論 朱振豪1 、彭康豪1 、莊煌甲1 、邱俊彥2,* 研究目的
----银行间的比较 论资本构成与充足率 淡 彩 的 黑 板 淡 彩 的 黑 板 金融73班 王艺霏 王 英
关于整合检验检测认证机构实施意见的通知(国办发〔2014〕8号)
初高中历史课程衔接 ♣ 深圳中学 朱红.
3.1能源资源的开发 ——以我国山西省为例.
推进德育创新 做好新时期班主任工作 北京市广渠门中学 高金英.
資料儲存.
拾貳、 教育行政 一、教育行政的意義 教育行政,可視為國家對教育事務的管理 ,以增進教育效果。 教育行政,乃是一利用有限資源在教育參
課程銜接 九年一貫暫行綱要( )  九年一貫課程綱要( ) 國立台南大學數學教育系 謝 堅.
2.4 二元一次方程组的应用(1).
鳳仙花家族 鳳仙花家族 作者:江潤章 非洲鳳仙花 鳳仙花 棣慕華鳳仙花 紫花鳳仙花 黃花鳳仙花.
《IOS应用开发教程》 QQ学习群:
《IOS应用开发教程》 QQ学习群:
Chapter 14 iPhone 平台簡介.
SUIImageView ZOOM 白仕云、iOS高级开发工程师 博客地址
Creating Animated Apps (I) 靜宜大學資管系 楊子青
授课老师:龚涛 信息科学与技术学院 2018年3月 教材: 《Visual C++程序员成长攻略》 《C++ Builder程序员成长攻略》
2 C++ 的基本語法和使用環境 親自撰寫和執行程式是學好程式語言的不二法門。本章藉由兩個簡單的程式,介紹C++ 程式的基本結構和開發環境,讓初學者能逐漸建立使用C++ 的信心。
Storyboard.
Segue.
IPHONE应用开发 资源管理项目组 2018年12月24日.
感測器.
Chapter 9 (三维几何变换) To Discuss The Methods for Performing Geometric Transformations.
《IOS应用开发基础教程》 QQ学习群:
Navigation Controller和 Table View
普通高速模板的制作与调整.
蘇柏奇 苗栗縣立興華高中 苗栗縣數學領域輔導團 國立交通大學 AMA 團隊
選擇勞退新制,終身免煩惱 勞工退休金新制 說明會.
《IOS应用开发教程》 QQ学习群:
Objective C練習.
C++语言程序设计 C++语言程序设计 第九章 类的特殊成员 第十一组 C++语言程序设计.
微信商城系统操作说明 色卡会智能门店.
<编程达人入门课程> 本节内容 为什么要使用变量? 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ:
設計者:台中市重慶國小 張祐榕.楊晟汶.張儷齡
辅导课程十一.
第二章 Java基本语法 讲师:复凡.
A Simple iOS Application
第6單元 6-1 類別的繼承 (Class Inheritance) 6-2 抽象類別 (Abstract Class)
IOS界面制作一二事 一个IOS初学者的心得分享 蒋瞿风.
大綱 一.受試者之禮券/禮品所得稅規範 二.範例介紹 三.自主管理 四.財務室提醒.
績優教師分享 美容保健科 林品瑄 教師.
用加減消去法解一元二次聯立方程式 台北縣立中山國中 第二團隊.
Presentation transcript:

多點觸控與手勢

UIResponder - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event touches : 觸控事件的集合. event: An object representing the event to which the touches belong. 當有一個或多個手指觸碰到view or window時會執行 此方法 多點觸控預設是關閉的,需將view的 multipleTouchEnabled 屬性設定為Yes.

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

UITouch - (CGPoint)locationInView:(UIView *)view Property 設定坐標系 若為nil,是使用 window’s coordinates Property NSUInteger tapCount Tap的次數

按Option(or Alt)鍵可以模擬2點觸控 (void)viewDidLoad { [super viewDidLoad]; self.view.multipleTouchEnabled=YES; } -(void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{ int i=0; for (UITouch *t in touches){ i++; CGPoint point=[t locationInView:self.view]; NSLog(@"touchesBegan: %d tapCount:%d x:%f y:%f",i,t.tapCount,point.x,point.y); -(void) touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event{ NSLog(@"touchesCancelled"); -(void) touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event{ NSLog(@"touchesEnded"); -(void) touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event{ NSLog(@"touchesMoved"); 按Option(or Alt)鍵可以模擬2點觸控

練習 建立一view-based專案,在畫面中放入一 ImageView,手指點到圖片並移動時,圖片會跟 著移動 Touch point center

int x,y; -(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{ UITouch *touch=[touches anyObject]; CGPoint point=[touch locationInView:[self superview]]; x=self.center.x-point.x; y=self.center.y-point.y; } -(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event{ CGPoint p=CGPointMake(point.x+x, point.y+y); [self setCenter:p];

手勢(Gesture) UIGestureRecognizer abstract base class The concrete subclasses of UIGestureRecognizer are the following: UITapGestureRecognizer UIPinchGestureRecognizer UIRotationGestureRecognizer UISwipeGestureRecognizer UIPanGestureRecognizer UILongPressGestureRecognizer UIScreenEdgePanGestureRecognizer

Managing Gesture Recognizers UIView (void)addGestureRecognizer:(UIGestureRecognizer *) gestureRecognizer 在view 中加入手勢辨識 (void)removeGestureRecognizer: (UIGestureRecognizer *)gestureRecognizer 移除手勢辨識.

Managing Gesture Recognizers UIView @property(nonatomic,copy) NSArray * gestureRecognizers 回傳已加入view中的手勢

UIGestureRecognizer 初始化手勢辨識 (id)initWithTarget:(id)target action:(SEL)action 設定手勢動作發生時要執行的方法

UIGestureRecognizer - (CGPoint)locationInView:(UIView *)view 回傳座標點 通常是多個觸控的中心點 UITapGestureRecognizer 若有多個taps這個是回傳第一個tap的座標點 若有多個觸控點這個是回傳多個觸控的中心點 UISwipeGestureRecognizer 回傳手勢開始的座標點

UIGestureRecognizer - (CGPoint)locationOfTouch:(NSUInteger) touchIndex inView:(UIView *)view 回傳指定觸控點的座標 @property(nonatomic, readonly) UIView * view 回傳此手勢所加入的view

UITapGestureRecognizer Property NSUInteger numberOfTapsRequired 設定手勢taps的次數 NSUInteger numberOfTouchesRequired 設定手勢需多少手指觸碰

UISwipeGestureRecognizer Property UISwipeGestureRecognizerDirection direction 設定手勢方向 NSUInteger numberOfTouchesRequired 設定手勢需多少手指觸碰 typedef enum { UISwipeGestureRecognizerDirectionRight = 1 << 0, UISwipeGestureRecognizerDirectionLeft = 1 << 1, UISwipeGestureRecognizerDirectionUp = 1 << 2, UISwipeGestureRecognizerDirectionDown = 1 << 3 } UISwipeGestureRecognizerDirection;

(void)viewDidLoad { [super viewDidLoad]; UISwipeGestureRecognizer *swipeLeft=[[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(handleSwipeLeft:)]; swipeLeft.direction = UISwipeGestureRecognizerDirectionLeft; [self.view addGestureRecognizer:swipeLeft]; UISwipeGestureRecognizer *swipeRight= [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(handleSwipeRight:)]; swipeRight.direction = UISwipeGestureRecognizerDirectionRight; [self.view addGestureRecognizer:swipeRight]; } (void)handleSwipeLeft:(UISwipeGestureRecognizer *)recognizer { CGPoint location = [recognizer locationInView:self.view]; NSLog(@"Swipe left started at (%f,%f)",location.x,location.y); (void)handleSwipeRight:(UISwipeGestureRecognizer *)recognizer { NSLog(@"Swipe right started at (%f,%f)",location.x,location.y);

UIRotationGestureRecognizer 旋轉手勢需2個手指觸碰 2個手指以反方向畫圓 Property CGFloat rotation 旋轉弧度 CGFloat velocity 旋轉弧度速度.

UIPinchGestureRecognizer Pinching gestures需2個手指觸碰 2個手指互相靠近:縮小 2個手指互相遠離:放大 屬性 CGFloat scale 放大縮小比例 >1: zoom-in <1:zoom-out CGFloat velocity 放大縮小速度

UIPanGestureRecognizer Panning (dragging) gestures拖拉手勢 Property NSUInteger maximumNumberOfTouches 設定最大手指頭數量 NSUInteger minimumNumberOfTouches 設定最小手指頭數量.

UIPanGestureRecognizer -(CGPoint)translationInView:(UIView *)view 移動距離 - (CGPoint)velocityInView:(UIView *)view 移動速度 - (void)setTranslation:(CGPoint)translation inView:(UIView *)view 設定移動值

練習 將UILabel用手勢拖動到任意位置

- (void)viewDidLoad { [super viewDidLoad]; UILabel *label=[[UILabel alloc]initWithFrame:CGRectMake(10, 10, 100, 50)]; label.text = @"Drag me!"; label.userInteractionEnabled = YES; UIPanGestureRecognizer *gesture = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(labelDragged:)]; [label addGestureRecognizer:gesture]; [self.view addSubview:label]; } - (void)labelDragged:(UIPanGestureRecognizer *)gesture{ UILabel *label = (UILabel *)gesture.view; CGPoint translation = [gesture translationInView:label]; label.center = CGPointMake(label.center.x + translation.x, label.center.y + translation.y); [gesture setTranslation:CGPointZero inView:label];

UILongPressGestureRecognizer 需一個或多個手指觸碰指定時間 手指指可以移動指定內的距離 若移動超出設定距離,手勢辨識失敗

UILongPressGestureRecognizer Property CGFloat allowableMovement 設定最大可移動距離 default distance :10 point. CFTimeInterval minimumPressDuration 設定最小觸碰時間. default duration : 0.5 seconds.

UILongPressGestureRecognizer Property NSUInteger numberOfTapsRequired 設定tap次數 NSInteger numberOfTouchesRequired 設定觸碰手指個數

UIScreenEdgePanGestureRecognizer 和panning (dragging) 手勢類似,但從視窗邊緣 開始 Property UIRectEdge edges 設定手勢開始的邊緣 typedef enum : NSUInteger { UIRectEdgeNone = 0, UIRectEdgeTop = 1 << 0, UIRectEdgeLeft = 1 << 1, UIRectEdgeBottom = 1 << 2, UIRectEdgeRight = 1 << 3, UIRectEdgeAll = UIRectEdgeTop | UIRectEdgeLeft | UIRectEdgeBottom | UIRectEdgeRight } UIRectEdge;

練習 利用UIScreenEdgePanGestureRecognizer手 勢將ViewController頁面打開

用程式驅動Segue

UIViewController Class 啟動segue - (void)performSegueWithIdentifier:(NSString *) identifier sender:(id)sender identifier: 要啟動的segue ID 返回使用Unwind拉線

在storyboard建立segue

設定ID

用程式載入Storyboard中的ViewController

在storyboard放入ViewController並設定ID

利用程式顯示畫面 ThirdViewController *third =[self.storyboard instantiateViewControllerWithIdentifier:@"third"]; [self presentViewController:third animated:YES completion:NULL];

回到上一頁 [self dismissViewControllerAnimated:YES completion:NULL];