ios 手势操作举例
2015-12-23 17:43
666 查看
#import "ViewController.h" @interface ViewController () @property (weak, nonatomic) IBOutlet UIView *targetView; @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; /* UIGestureRecognizer 父类手势带给的东西 初始化方法: - (instancetype)initWithTarget:(nullable id)target action:(nullable SEL)action NS_DESIGNATED_INITIALIZER; 给手势添加事件和移动事件 手势的状态 */ //添加单击手势 UITapGestureRecognizer *singleTap=[[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(singleTapAction:)]; [self.view addGestureRecognizer:singleTap]; //双击 UITapGestureRecognizer *doubleTap=[[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(doubleTapAction:)]; doubleTap.numberOfTouchesRequired=2; [self.view addGestureRecognizer:doubleTap]; //单击要想执行必须双击失效 [singleTap requireGestureRecognizerToFail:doubleTap]; //长按手势, UILongPressGestureRecognizer *longPress=[[UILongPressGestureRecognizer alloc]initWithTarget:self action:@selector(longPressAction:)]; [self.targetView addGestureRecognizer:longPress]; //捏合手势 UIPinchGestureRecognizer *pinchGesture=[[UIPinchGestureRecognizer alloc]initWithTarget:self action:@selector(pinchGestureAction:)]; [self.targetView addGestureRecognizer:pinchGesture]; //拖拽 UIPanGestureRecognizer *panGesture=[[UIPanGestureRecognizer alloc]initWithTarget:self action:@selector(panAction:)]; [self.targetView addGestureRecognizer:panGesture]; //旋转 UIRotationGestureRecognizer *rotation=[[UIRotationGestureRecognizer alloc]initWithTarget:self action:@selector(rotationAction:)]; [self.targetView addGestureRecognizer:rotation]; //旋转要想执行必须缩放失效 [pinchGesture requireGestureRecognizerToFail:rotation]; //左横扫 UISwipeGestureRecognizer *leftswipeGesture=[[UISwipeGestureRecognizer alloc]initWithTarget:self action:@selector(SwipeAction:)]; [self.view addGestureRecognizer:leftswipeGesture]; leftswipeGesture.direction=UISwipeGestureRecognizerDirectionLeft; //右横扫 UISwipeGestureRecognizer *rightSwipeGesture=[[UISwipeGestureRecognizer alloc]initWithTarget:self action:@selector(SwipeAction:)]; [self.view addGestureRecognizer:rightSwipeGesture]; rightSwipeGesture.direction=UISwipeGestureRecognizerDirectionRight; //上横扫 UISwipeGestureRecognizer *upswipeGesture=[[UISwipeGestureRecognizer alloc]initWithTarget:self action:@selector(SwipeAction:)]; [self.view addGestureRecognizer:upswipeGesture]; upswipeGesture.direction=UISwipeGestureRecognizerDirectionUp; //下横扫 UISwipeGestureRecognizer *downSwipeGesture=[[UISwipeGestureRecognizer alloc]initWithTarget:self action:@selector(SwipeAction:)]; [self.view addGestureRecognizer:downSwipeGesture]; downSwipeGesture.direction=UISwipeGestureRecognizerDirectionDown; } //横扫 -(void)SwipeAction:(UISwipeGestureRecognizer *)sender{ switch (sender.direction) { case UISwipeGestureRecognizerDirectionRight://从右向左滑 { CATransition *animation=[CATransition animation];//创建CATransition 对象 animation.delegate=self; //动画代理 animation.duration=1.0f;//动画持续时间 animation.timingFunction=UIViewAnimationCurveEaseInOut;//速度控制函数,控制动画运行的节奏 animation.type=kCATransitionMoveIn;//设置运动type animation.subtype=kCATransitionFromLeft;//视图向左滑 [sender.view.layer addAnimation:animation forKey:@"move in"]; } break; case UISwipeGestureRecognizerDirectionLeft://从左向右滑 { CATransition *animation=[CATransition animation]; animation.delegate=self; animation.duration=1.0f; animation.timingFunction=UIViewAnimationCurveEaseInOut; animation.type=kCATransitionMoveIn; animation.subtype=kCATransitionFromRight; [sender.view.layer addAnimation:animation forKey:@"move in"]; } break; case UISwipeGestureRecognizerDirectionDown://向下滑 { CATransition *animation=[CATransition animation]; animation.delegate=self; animation.duration=1.0f; animation.timingFunction=UIViewAnimationCurveEaseInOut; animation.type=kCATransitionMoveIn; animation.subtype=kCATransitionFromBottom; [sender.view.layer addAnimation:animation forKey:@"move in"]; } break; case UISwipeGestureRecognizerDirectionUp://向上滑 { CATransition *animation=[CATransition animation]; animation.delegate=self; animation.duration=1.0f; animation.timingFunction=UIViewAnimationCurveEaseInOut; animation.type=kCATransitionMoveIn; animation.subtype=kCATransitionFromTop; [sender.view.layer addAnimation:animation forKey:@"move in"]; } break; default: break; } } //旋转 -(void)rotationAction:(UIRotationGestureRecognizer *)sender{ sender.view.transform = CGAffineTransformRotate(sender.view.transform, sender.rotation); sender.rotation=10.0;//旋转速度 } //拖拽 -(void)panAction:(UIPanGestureRecognizer *)sender{ /* //当手势按在视图上面的点,转为父系坐标 拿到中心点 CGPoint translatedPoint=[sender translationInView:self.view]; CGFloat firstX; CGFloat firstY; if ([sender state]==UIGestureRecognizerStateBegan) { firstX=[sender.view center].x; firstY=[sender.view center].y; } translatedPoint=CGPointMake(firstX+translatedPoint.x, firstY+translatedPoint.y); [sender.view setCenter:translatedPoint];*/ //中心拖拽 /* //当你的状态不等于结束状态,不等于失败状态 if (sender.state != UIGestureRecognizerStateEnded && sender.state != UIGestureRecognizerStateFailed) { CGPoint location = [sender locationInView:sender.view.superview]; sender.view.center = location; }*/ //视图前置操作 [sender.view.superview bringSubviewToFront:sender.view]; //拖拽 CGPoint center = sender.view.center; CGFloat cornerRadius = sender.view.frame.size.width / 2; CGPoint translation = [sender translationInView:self.view]; //NSLog(@"%@", NSStringFromCGPoint(translation)); sender.view.center = CGPointMake(center.x + translation.x, center.y + translation.y); [sender setTranslation:CGPointZero inView:self.view]; //动画效果 if (sender.state == UIGestureRecognizerStateEnded) { //计算速度向量的长度,当他小于200时,滑行会很短 CGPoint velocity = [sender velocityInView:self.view]; CGFloat magnitude = sqrtf((velocity.x * velocity.x) + (velocity.y * velocity.y)); CGFloat slideMult = magnitude / 200; //NSLog(@"magnitude: %f, slideMult: %f", magnitude, slideMult); //e.g. 397.973175, slideMult: 1.989866 //基于速度和速度因素计算一个终点 float slideFactor = 0.1 * slideMult; CGPoint finalPoint = CGPointMake(center.x + (velocity.x * slideFactor), center.y + (velocity.y * slideFactor)); //限制最小[cornerRadius]和最大边界值[self.view.bounds.size.width - cornerRadius],以免拖动出屏幕界限 finalPoint.x = MIN(MAX(finalPoint.x, cornerRadius),self.view.bounds.size.width - cornerRadius); finalPoint.y = MIN(MAX(finalPoint.y, cornerRadius),self.view.bounds.size.height - cornerRadius); //使用 UIView 动画使 view 滑行到终点 [UIView animateWithDuration:slideFactor*2 delay:0 options:UIViewAnimationOptionCurveEaseOut animations:^{ sender.view.center = finalPoint; } completion:nil]; } } //缩放 -(void)pinchGestureAction:(UIPinchGestureRecognizer *)sender{ NSLog(@"xxx"); sender.view.transform=CGAffineTransformMakeScale(sender.scale, sender.scale); } //长按 -(void)longPressAction:(UILongPressGestureRecognizer *)sender{ //长按出现通知框 ios 9 if (sender.state==UIGestureRecognizerStateEnded) { UIAlertController *alertController=[UIAlertController alertControllerWithTitle:@"标题" message:@"选择照片" preferredStyle:UIAlertControllerStyleActionSheet]; UIAlertAction *photoAction=[UIAlertAction actionWithTitle:@"拍照" style:UIAlertActionStyleDestructive handler:^(UIAlertAction * _Nonnull action) { NSLog(@"调用照相机"); }]; [alertController addAction:photoAction]; UIAlertAction *libraryAction=[UIAlertAction actionWithTitle:@"相册" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) { NSLog(@"调用本地相册"); }]; [alertController addAction:libraryAction]; UIAlertAction *cancleAction=[UIAlertAction actionWithTitle:@"取消" style:UIAlertActionStyleCancel handler:^(UIAlertAction * _Nonnull action) { NSLog(@"取消"); }]; [alertController addAction:cancleAction]; [self presentViewController:alertController animated:YES completion:nil]; } } //单击 -(void)singleTapAction:(UITapGestureRecognizer *)sender{ NSLog(@"你单了哈"); //改变背景颜色 if (sender.view.backgroundColor==[UIColor whiteColor]) { sender.view.backgroundColor=[UIColor cyanColor]; }else{ sender.view.backgroundColor=[UIColor whiteColor]; } } //双击 -(void)doubleTapAction:(UITapGestureRecognizer *)sender{ NSLog(@"双击"); } - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; } @end
相关文章推荐
- iOS -- 图形绘制(全)
- iOS开发系统版本适配(未完待续。。。)
- iOS - 归档的理解和摘记
- iOS如何获取设备声音和振动功能
- iOS CGContextRef画图小结
- ios——学习网址收集
- ios发布可能出现的问题
- iOS如何获取设备硬件信息
- iOS的绘图机制
- iOS字符串的大小写互相转换
- iOS如何从一个界面返回到指定界面?
- iOS CoreAnimation专题——原理篇(三) CALayer的模型层与展示层
- iOS中强制转换
- iOS中消息的传递机制
- iOS使用NSMutableAttributedString 实现富文本(不同颜色字体、划线等等)
- iOS如何隐藏NavigationBar
- IOS开发微博中涉及到的一些正则表达式(表情,话题,链接,@)
- iOS 深浅拷贝
- iOS开发简单的实现后台任务(诸如后台播放音乐,定时器等)
- iOS在Xcode中,文件名后小方框中的A(M或C)代表的意思