UI基础之---手势

本文详述了UI设计中常用的手势识别,包括轻拍、长按、轻扫、平移、捏合、旋转和屏幕边缘手势,并提供了相应的代码示例。同时介绍了分段控件(UISegmentedControl)的使用,包括设置选项、插入和移除段、设置段宽和颜色等操作,并添加了点击事件响应。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本文主要是对 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];

}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值