本文主要是对 UI 中比较常见的其中手势的总结,代码是自己敲的可能有的地方有问题,请多包涵.
一基本手势(UIGestureRecognizer)
UIGestureRecognizer手势类的基类,基类中又有一些公共的属性和方法
1. 轻拍手势(UITapGestureRecognizer),能识别轻拍的操作
UITapGestureRecognizer*tapGR = [UITapGestureRecognizer alloc]initWithTarget:selfaction:@selector(tapGR:);
tapGR.numberOfTapsRecognize = 2;
添加到 view
[view addGestureRecognizer:tapGR];
释放轻拍手势
[tapGR release];
轻拍手势响应的方法:
- (void) tapGR:(UITapGestureRecognizer *)sender{
sender.view.backgroundColor= [UIColor randomColor];
}
// 1.轻拍手势
//轻拍手势
{
// 1.UITapGestureRecognizer 轻拍手势 能识别轻拍的操作
UITapGestureRecognizer *tapGR = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(tapCR:)];
tapGR.numberOfTapsRequired = 2;
// 给 view 添加手势
[view addGestureRecognizer:tapGR ];
// 释放轻拍手势对象
[tapGR release];
}
#pragma mark --------实现方法-------------
- (void)tapCR:(UITapGestureRecognizer *)cp{
// 设置使用的手指数
cp.view.backgroundColor = [UIColor randomColor];
}
2. 长按手势(UILongPressGestureRecognizer),长按屏幕的时候触发
UILongPressGestureRecognize*longGR = [UILongPressGestureRecognizer alloc]initWithTarget:selfaction:@selector(longGR:);
[view addGestureRecognizer:longGR];
设置按压时间
longGR.minimumPressDuration= 2;
[longGR release];
长按手势响应的方法:
-(void)longGR:(UILongPressGestureRecognizer *)sender{
判断手势按压类型,不加判断会走所有可能手势状态都会触发的方法
if(sender.state ==UIGestureRecognizerStateBegan)){
sender.view.backgroundColor= [UIColor redColor];
}
}
3. 轻扫手势(UISwipeGestureRecognizer),轻扫屏幕的时候触发
UISwipeGestureRecognizer*swipe = [UISwipeGestureRecognizer alloc]initWithTarget:self action:@selector(swipeGR:);
设置轻扫方向
swipe.direction =UISwipeGestureRecognizerDirectionLeft;
[view addGestureRecognizer:swipe];
[swipe release];
轻扫手势响应事件
-(void) swipeGR:(UISwipeGestureRecognizer *)sender{
if(sender.direction== UISwipeGestureRecognizerDirectionRight)
{
sender.view.backgroundColor= [UIColor redColor];
}else{
sender.view.backgroundColor= [UIColor blueColor];
}
}
4. UIPanGestureRecognizer平移手势
UIPanGestureRecognizer*panGR =[[UIPanGestureRecognizer alloc]initWithTarget:self action:@selector(panGR:)];
[viewaddGestureRecognizer:panGR];
[panGR release];
平移手势的响应方法:
-(void)panGR:(UIPanGestureRecognizer *)sender{
方法一:
1> 获取平移增量
CGPoint point =[sender translationInView: sender.view];
2> 获取改变后视图的位置
sender.view.center =CGPointMake(sender.view.center.x + point.x,send.view.center.y + point.y);
3> 将之前的增量清零
CGPointMake(0,0)可以使用CGPointZero 进行替换
[sender setTranslation:CGPointMake(0,0)inView:sender.view];
方法二:
2D 仿射变换
sender.view.transform =CGAffineTransformTranslate(send.view.transform,point.x,point.y);
[sender setTranslation:CGPointZero inView:sender.view];
}
5. 捏合手势(UIPinchGestureRecognizer),两个手指的操作,主要用来放大图片的时候使用UIPinchGestureRecognizer*pinGR = [[UIPinchGestureRecognizer alloc]initWithTarget: self action: @selector(pinGR:)];
[viewaddGestureRecognizer:pinGR];
[pinGR release];
捏合手势的响应事件
-(void)pinGR:(UIPinchGestureRecognizer *)sender{
scale 缩放比例 以最初的 transform 为基准
sender.view.transform= CGAffineTransformScale(sender.view.transform,sender.scale,sender.scale);
将之前的缩放比例置为1
sender.scale = 1;
}
6. 旋转手势(UIRotationGestureRecognizer)UIRotationGestureRecognizer*rotation = [UIRotationGestureRecognizer alloc]initWithTarget: selfaction:@selector(rotation:);
[viewaddGestureRecognizer:rotation];
[rotation release];
旋转手势的响应事件:
-(void)rotation:(UIRotationGestureRecognizer *)sender{
sender.view.transform =CGAffineTransformRotate(sender.view.transform,send.rotation);
清除上次旋转的弧度
sender.rotation= 0.0;
}
7. 屏幕边缘手势UIScreenEdgePanGestureRecognizer*screenGR = [UIScreenEdgePanGestureRecognizer alloc]initWithTarget:selfaction:@selector(screenGR:);
ScreenGR.edges =UIRectEdgeLeft; 设置手势的起始的屏幕边缘
[viewaddGestureRecognizer:screenGR];
[screenGR release];
屏幕边缘手势响应事件:
-(void) screenGR:(UIScreenEdgePanGestureRecognizer *)sender{
1>首相获取平移增量
CGPoint point =[sender translationInView:sender.view];
2>平移视图
sender.view.transform= CGAffineTransformTranslate(sneder.view.transform,point.x,0);
3>将上次增量清零
[sendersetTranslation:CGPointZero inView:sender.view];
}
二 分段控件(UISegmentedControl)
NSArray*array = @[@”123”,@”321”,@”456”,@”789”,@”987”];
UISegmentedControl*segmented = [[UISegmentedControl alloc]initWithItems:array];
segmented.frame= CGRectMake(10,400,300,30);
设置默认选项卡
segmented.selectedSegmentIndex= 2;
设置再次点击后是否恢复原样
segmented.momentary = YES;
为每一段设置标题
[segmentedsetTitle:@”首页” forSegmentAtIndex:0];
设置索引的图片
[segmentedsetImage:[UIImage imageNamed:@”123.png”] forSegmentAtIndex:0];
在指定位置插入一个选项并设置图片
[segmenedinsertSegmentWithImage:(UIImage *)
atIndex:(NSUInteger) animated:(BOOL)];
在指定位置插入选项并设置标题
[segmenedinsertSegmentWithTitle:(NSString *) atIndex:(NSUInteger) animated:(BOOL)];
移除指定索引的选项
[segmenedremoveSegmentAtIndex:(NSUInteger) animated:(BOOL)];
设置指定索引的宽度
[segmenedsetWidth:(CGFloat) forSegmentAtIndex:(NSUInteger)];
设置每段的标题
[segmented setTitle:@”首页” forSegmentAtIndex:0];
[segmented setTitle:@”公司简介” forSegmentAtIndex:1];
设置颜色
segmened.tintColor= [UIColor redColor];
添加点击事件
[segmentedaddTarget:self action:@selector(change:) forControlEvents:UIControlEventValueChanged];
添加到视图
[self.viewaddSubview: segmened];
[segmentedrelease];
点击响应事件,用来改变根视图的颜色
-(void)change:(UISegmentedControl *)sender{
self.view.backgroundColor= [UIColor redColor];
}