07 手势识别器、UIImageView、(transform)、模拟button内部实现触摸事件
来源:互联网 发布:幸运星 网络偶像大师 编辑:程序博客网 时间:2024/06/15 14:57
重点
1.target…action和delegate是很重要的设计模式,务必理解原理以及熟练使用
2.手势识别器是很常用的类,在日常开发中经常使用,需要牢记每个手势识别器的特点以及注意事项
3.transform是view的重要属性,在屏幕旋转方面用的比较多。
1、手势识别器
注意7个手势识别器的特点以及注意事项。
UITapGestureRecognizer是轻拍手势识别器,能识别轻拍操作
UILongPressGestureRecognizer是长按手势识别器,能识别长按操作。
UIRotationGestureRecognizer是旋转 势识别器,能识别旋转操作。
UIPinchGestureRecognizer是捏合手势识别器,能识别捏合操作。
UIPanGestureRecognizer是平移手势识别器,能识别拖拽操作。
UISwipeGestureRecognizer是轻扫手势识别器,能识别拖拽操作。
UIScreenEdgePanGestureRecognizer是屏幕边缘轻扫识别器,是iOS7中新增的手势。
我们不会直接使用势识别器这个抽象 类, 是根据需要使 用特定的 手势识别器创建对象。
1、创建UIxxxGestureRecognizer对象,使用initWithTarget:action: 方法;
2、配置要识别的手势的相关信息;
3、将手势添加到某个视图上;
4、实现手势识别器 定义的方法
二、UIImageView的使用
常用方法和属性
image //设置图片
animationImages //设置一组动态图片
animationDuration //设置播放一次一组动态图片的时间
animationRepeatCount //设置重复次数
startAnimating //开始动画
stopAnimating //结束动画
UIImageView显示图片方法(2种)
第1种方法(可以)在view上面添加一个UIImageView
UIImageView *imageView = [[UIImageView alloc] initWithFrame:view.bounds]; imageView.image = [[UIImage imageNamed:@"name.png"] stretchableImageWithLeftCapWidth:left topCapHeight:top]; [view addSubview:imageView];
这种方法好处是在view释放后,内存中的东西也会释放。
第2种方法(推荐) quartzCore方式
UIImage *image = [UIImage imageNamed:@"name.png"]; view.layer.contents = (id) image.CGImage; // 如果需要背景透明加上下面这句 view.layer.backgroundColor = [UIColor clearColor].CGColor;
图片的渲染方式(取消渲染)
[button setImage:[[UIImage imageNamed:@"1.jpg" ] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal] forState:UIControlStateNormal] ;
通过2D仿射函数实现小的动画效果(变大缩小) –可用于自定义pageControl中
[UIView animateWithDuration:0.3 animations:^{ imageView.transform = CGAffineTransformMakeScale(2, 2); } completion:^(BOOL finished) { imageView.transform = CGAffineTransformMakeScale(1.0, 1.0); }];
3.transform(2D仿射变换函数)
详见课上代码
//平移手势的回调方法- (void)panAction: (UIPanGestureRecognizer *)sender{ //得到当前手势所在试图 UIView *view = sender.view;// //得到我们在视图上移动的偏移量(x,y组合成点) CGPoint currentPoint = [sender translationInView:view.superview];//在父视图的偏移量 /* 2D仿射变换函数中的 与位移有关的函数 来实现视图的位置变化 */ view.transform = CGAffineTransformTranslate(view.transform, currentPoint.x, currentPoint.y); //复原 先讲偏移量从0开始,阻止累加 [sender setTranslation:CGPointZero inView:view.superview]; NSLog(@"我平移了 gestureView");}//-----------------------由此例可知因此手势也是触碰事件TouchEvents//旋转手势的回调方法- (void)rataAction: (UIRotationGestureRecognizer *)sender{ //通过旋转手势得到旋转角度 float rota = sender.rotation; //得到该手势当前所作用的视图 UIView *view = sender.view; /* 2D仿射变换函数中的 旋转函数 来实现视图的旋转 */ view.transform = CGAffineTransformRotate(view.transform, rota);//<#CGFloat angle#> 旋转角度 //复原 sender.rotation = 0; NSLog(@"我旋转了 gestureView");}//捏合手势的回调方法- (void)pinchAction: (UIPinchGestureRecognizer *)sender{ //通过捏和手势得到缩放比率 float scale = sender.scale; //得到捏合手势所作用的视图 UIView *view = sender.view; /* 2D仿射变换函数中的 缩放函数 来实现视图的放大缩小 */ /* 是在原有基础上来改变当前的视图 Alt键模拟捏合 函数的第一个参数:<#CGAffineTransform t#> 现有的视图的transform矩阵 第二个参数:<#CGFloat sx#> x轴上的缩放比率 第三个参数:<#CGFloat sy#> y轴上的缩放比率*/ view.transform = CGAffineTransformScale(view.transform, scale, scale);//参照新生成当前视图// /*是在视图最初的transform状态上改变,不管执行多少次,都是以最初的transform状态为基础来改变*/// view.transform = CGAffineTransformMakeScale(0.5, 0.5);//参照最初视图 //每次捏合动作完毕后,让此捏合值复原,使得它每次都是从100%开始缩放 sender.scale = 1;//复原 NSLog(@"我捏合了 gestureView");}//轻拍手势的回调方法- (void)tapAction: (UITapGestureRecognizer *)sender{ //可以根据手势得到它当前所作用的视图 UIImageView *imageView = (UIImageView *)sender.view; //由tag得到textfield /*viewWithTag:此方法的返回值为UIView类型,但是UITextField为UIView的子类,父类指针不能直接指向子类对象,所以需要强制转换*/// UITextField *textField = (UITextField *)[self.window viewWithTag:1000];// /*回收键盘,取消第一响应者*/// [textField resignFirstResponder]; NSLog(@"我轻拍了 gestureView");}
注意:
1 、 UIImageView的用户交互默认是关闭的,要想使它可以处理触摸时间,需要手动打开它
2 、 一个视图可以添加多种手势,但是一个手势,只能添加到一个视图上
3 、点击屏幕空白处回收键盘♻️方法
//轻拍手势的回调方法- (void)tapAction: (UITapGestureRecognizer *)sender{ //可以根据手势得到它当前所作用的视图 UIImageView *imageView = (UIImageView *)sender.view; //由tag得到textfield /*viewWithTag:此方法的返回值为UIView类型,但是UITextField为UIView的子类,父类指针不能直接指向子类对象,所以需要强制转换*/// UITextField *textField = (UITextField *)[self.window viewWithTag:1000];// /*回收键盘,取消第一响应者*/// [textField resignFirstResponder]; NSLog(@"我轻拍了 gestureView");}
- 07 手势识别器、UIImageView、(transform)、模拟button内部实现触摸事件
- 手势识别器(UIImageView)
- iOS中事件产生、触摸、手势以及手势识别器
- 手势识别、触摸事件 知识点
- 手势识别(五)触摸事件与手势识别重要知识点
- IOS 触摸事件、手势识别讲解
- 读书笔记---触摸事件与手势识别
- 触摸事件与手势识别1
- ios触摸事件和手势识别
- 学习笔记 - 触摸事件&手势识别
- iOS触摸事件与手势识别详解
- iOS编程-------UIImageView、手势识别器UIGestureRecognizer
- iOS- UIImageView/手势识别
- Cosmos 如何实现多点触摸手势识别
- 触摸事件(含手势)
- iOS:触摸事件、手势识别、摇晃事件、耳机线控
- iOS--触摸事件、手势识别、摇晃事件、耳机线控
- iOS 触摸事件、手势识别、摇晃事件、耳机线控
- day05 homework
- Scala访问修饰符
- Laravel Repository 模式-让你控制器更易读
- SD卡读写实例
- 最大似然估计 (MLE) 最大后验概率(MAP)
- 07 手势识别器、UIImageView、(transform)、模拟button内部实现触摸事件
- 分布式计算,大型网站技术架构:核心原理与案例分析
- Service后台播放音乐
- IPC——android进程间通信
- 初学者学习编程语言的方法
- hdu 1163(九余数定理)
- 对javascript匿名函数的理解
- 【C++11】新特性——引入nullprt
- Android Studio 集成JPUSH推送