IOS開發UI篇—手勢辨識器(拖拽+旋轉+縮放)

來源:互聯網
上載者:User

 一、拖拽 範例程式碼: 複製代碼 1 // 2 //  YYViewController.m 3 //  06-拖拽事件 4 // 5 //  Created by apple on 14-6-19. 6 //  Copyright (c) 2014年 itcase. All rights reserved. 7 // 8  9 #import "YYViewController.h"10 11 @interface YYViewController ()12 @property (strong, nonatomic) IBOutlet UIView *iconView;13 14 @end15 16 @implementation YYViewController17 18 - (void)viewDidLoad19 {20     [super viewDidLoad];21 22     //拖拽事件23     UIPanGestureRecognizer *pan=[[UIPanGestureRecognizer alloc]init];24     [self.iconView addGestureRecognizer:pan];25     [pan addTarget:self action:@selector(panView:)];26 }27 28 -(void)panView:(UIPanGestureRecognizer*)pan29 {30     //以控制器上的view的左上方為座標原點31     CGPoint point=[pan locationInView:pan.view];32     NSLog(@"拖拽事件");33     NSLog(@"擷取到的觸摸點的位置為:%@",NSStringFromCGPoint(point));34     35     CGPoint point1=[pan translationInView:pan.view];36     NSLog(@"拖拽事件1");37     NSLog(@"擷取到的觸摸點的位置為:%@",NSStringFromCGPoint(point1));38     39     //手指拖動,讓自訂的view也跟著手指移動40     CGPoint temp=self.iconView.center;41     temp.x+=point1.x;42     temp.y+=point1.y;43     self.iconView.center=temp;44     45     //清空46     [pan setTranslation:CGPointZero inView:pan.view];47 }48 @end複製代碼 注意點:1.注意拖拽事件的位移疊加。 注意數學遞增性,需要在每次調用完之後進行清空處理。   2.注意擷取的點是以手指按下的點為原點的。CGPoint point1=[pan translationInView:pan.view];     //以控制器上的view的左上方為座標原點 CGPoint point=[pan locationInView:pan.view];    二、旋轉 範例程式碼: 複製代碼 1 // 2 //  YYViewController.m 3 //  07-旋轉 4 // 5 //  Created by apple on 14-6-19. 6 //  Copyright (c) 2014年 itcase. All rights reserved. 7 // 8  9 #import "YYViewController.h"10 11 @interface YYViewController ()12 @property (weak, nonatomic) IBOutlet UIImageView *iconView;13 14 @end15 16 @implementation YYViewController17 18 - (void)viewDidLoad19 {20     [super viewDidLoad];21     22     //旋轉23     //建立手勢辨識器(旋轉)24     UIRotationGestureRecognizer *gesture=[[UIRotationGestureRecognizer alloc]init];25     //添加手勢辨識器26     [self.iconView addGestureRecognizer:gesture];27     //監聽28     [gesture addTarget:self action:@selector(gestureView:)];29 }30 31 -(void)gestureView:(UIRotationGestureRecognizer*)gesture32 {33     34     //旋轉的弧度:gesture.rotation35     NSLog(@"旋轉事件,旋轉的弧度為:%1f",gesture.rotation);36     37     //讓圖片跟隨手指一起旋轉38     //每次從最初的位置開始39 //    self.iconView.transform=CGAffineTransformMakeRotation(gesture.rotation);40     41     //在傳入的transform的基礎上旋轉42     //在之前的基礎上,讓圖片跟隨一起旋轉(去掉自動布局)43     //注意問題:以風火輪的速度旋轉44     self.iconView.transform=CGAffineTransformRotate(self.iconView.transform, gesture.rotation);45     //將旋轉的弧度清零46     //(注意不是將圖片旋轉的弧度清零,而是將當前手指旋轉的弧度清零)47     gesture.rotation=0;48 }49 @end複製代碼 注意點: 1.imageview預設為不可互動的,且不支援多點觸控,需要在storyboard中勾選這兩項。   2.旋轉的度數疊加   3.旋轉   將旋轉弧度清零之後,每次調用又從零開始。     三、縮放 複製代碼 1 // 2 //  YYViewController.m 3 //  07-旋轉 4 // 5 //  Created by apple on 14-6-19. 6 //  Copyright (c) 2014年 itcase. All rights reserved. 7 // 8  9 #import "YYViewController.h"10 11 @interface YYViewController ()<UIGestureRecognizerDelegate>12 @property (weak, nonatomic) IBOutlet UIImageView *iconView;13 14 @end15 16 @implementation YYViewController17 18 - (void)viewDidLoad19 {20     [super viewDidLoad];21     [self pinchTest];22     [self gestureTest];23 }24 25 -(void)pinchTest26 {27         //縮放28     UIPinchGestureRecognizer *pinch=[[UIPinchGestureRecognizer alloc]init];29     [self.iconView addGestureRecognizer:pinch];30     [pinch addTarget:self action:@selector(pinchView:)];31     32     //設定代理33     pinch.delegate=self;34 }35 36 -(void)pinchView:( UIPinchGestureRecognizer* )pinch37 {38     //縮放的比例    pinch.scale;39     NSLog(@"縮放:%f",pinch.scale);40     //對圖片進行縮放41 //    self.iconView.transform=CGAffineTransformMakeScale(pinch.scale,pinch.scale);42     //在已有的基礎上對圖片進行縮放43     self.iconView.transform=CGAffineTransformScale(self.iconView.transform, pinch.scale, pinch.scale);44     //清零45     pinch.scale=1.0;46 }47 -(void)gestureTest48 {49     //旋轉50     //建立手勢辨識器(旋轉)51     UIRotationGestureRecognizer *gesture=[[UIRotationGestureRecognizer alloc]init];52     //添加手勢辨識器53     [self.iconView addGestureRecognizer:gesture];54     //監聽55     [gesture addTarget:self action:@selector(gestureView:)];56     57     //設定代理58     gesture.delegate=self;59 }60 -(void)gestureView:(UIRotationGestureRecognizer*)gesture61 {62     63     //旋轉的弧度:gesture.rotation64     NSLog(@"旋轉事件,旋轉的弧度為:%1f",gesture.rotation);65     66     //讓圖片跟隨手指一起旋轉67     //每次從最初的位置開始68 //    self.iconView.transform=CGAffineTransformMakeRotation(gesture.rotation);69     70     //在傳入的transform的基礎上旋轉71     //在之前的基礎上,讓圖片跟隨一起旋轉(去掉自動布局)72     //注意問題:以風火輪的速度旋轉73     self.iconView.transform=CGAffineTransformRotate(self.iconView.transform, gesture.rotation);74     //將旋轉的弧度清零75     //(注意不是將圖片旋轉的弧度清零,而是將當前手指旋轉的弧度清零)76     gesture.rotation=0;77 }78 79 //實現代理方法80 -(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer81 {82     //預設為NO,這裡設定為YES83     return YES;84 }85 @end

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.