07 手势识别器、UIImageView、(transform)、模拟button内部实现触摸事件
2015-12-18 20:12
489 查看
重点
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
这种方法好处是在view释放后,内存中的东西也会释放。
第2种方法(推荐) quartzCore方式
图片的渲染方式(取消渲染)
通过2D仿射函数实现小的动画效果(变大缩小) –可用于自定义pageControl中
3.transform(2D仿射变换函数)
详见课上代码
注意:
1 、 UIImageView的用户交互默认是关闭的,要想使它可以处理触摸时间,需要手动打开它
2 、 一个视图可以添加多种手势,但是一个手势,只能添加到一个视图上
3 、点击屏幕空白处回收键盘♻️方法
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"); }
相关文章推荐
- UILabel的使用
- 有关OpenCV1.0中GUI命令的几个函数学习总结
- UITextField的使用
- UIScreen,UIFont,UIColor,UIView,UIButton等总结
- Java中serialVersionUID的解释
- Java中的SerialVersionUID
- 关于Serializable的serialVersionUID
- UVALive-3972 March of the Penguins (最大流:节点容量)
- iOS之UITableView带滑动操作菜单的Cell
- easyui datagrid fitColumns 不生效
- IOS 代码创建UI界面
- UIScrollView(Auto Layout)
- How to set field values using Java reflection
- xcode-select: error: tool 'xcodebuild' requires Xcode, but active developer directory '/Library/Deve
- [Android UI研究] 学习笔记
- HDOJ&nbsp;1242&nbsp;&nbsp;&nbsp;Rescue
- HDOJ&nbsp;&nbsp;2152&nbsp;&nbsp;&nbsp;Fruit
- 初探UUID
- HDOJ&nbsp;&nbsp;1005&nbsp;&nbsp;&nbsp;Number&nbsp;Sequence
- UIGestureRecognizer转换成相应子view的点