UI 06 7种手势

// UIImageView
    UIImage *image = [UIImage imageNamed:@"u=3179572108,1349777253&fm=21&gp=0.jpg"];
    self.imageView = [[UIImageView alloc] initWithImage:image];
    self.imageView.frame = CGRectMake(45, 100, 300, 300);
    [self.view addSubview:self.imageView];
    [_imageView release];

1. 点击

    // 用户交互默认是关闭的就只有两个控件,一个是不能够点击的UILabel, 一个是UIImageView.我们想要点击UIImageView需要把用户交互打开.
    self.imageView.userInteractionEnabled = YES;

 UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapAction:)];
    // 设置点击几次才会触发的方法:
    tap.numberOfTapsRequired = 2;
    //设置几根手指:
    tap.numberOfTouchesRequired = 2;
    //将手势添加到对应的图片上
    [self.imageView addGestureRecognizer:tap];
    [tap release];
#pragma mark 点击的手势方法.
- (void)tapAction:(UITapGestureRecognizer *)tap{
    // 点击改变图片
    self.imageView.image = [UIImage imageNamed:@"1.jpg"];
}

2.长按

UILongPressGestureRecognizer *longPress = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(longPressAction:)];
    // 设置长按触发的最小时间
    longPress.minimumPressDuration = 1;
    // 允许用户手指在长安过程中允许移动的距离,超过范围就停止.
    longPress.allowableMovement = 200;
    // 把手势添加到图片
    [self.imageView addGestureRecognizer:longPress];
    [longPress release];
#pragma  mark 长按的手势方法.
- (void)longPressAction:(UILongPressGestureRecognizer *)longpress{
    // 长按状态
   // longpress.state;
    //长按弹出来一个UIAlertView
    if (self.alertView == nil) {
    self.alertView = [[UIAlertView alloc] initWithTitle:@"要删除么?" message:@"不要删除我啊!" delegate:self cancelButtonTitle:@"卖萌可耻,无情地删除!" otherButtonTitles:@"你这么可爱,不删了~", nil];
    [self.alertView show];
    [_alertView release];
    }else{
       [self.alertView show];
    }
}

3.旋转

UIRotationGestureRecognizer *rotation = [[UIRotationGestureRecognizer alloc] initWithTarget:self action:@selector(rotationAction:)];
    [self.imageView addGestureRecognizer:rotation];
    [rotation release];
#pragma mark 通过旋转手势,让图片发生旋转.
- (void)rotationAction:(UIRotationGestureRecognizer *)rotation{
    // 可以通过手势获取手势添加的视图是哪一个
    UIImageView *imageview =(UIImageView *) rotation.view;
    NSLog(@"%@",imageview);
    // 进行旋转操作
    //通过视图的一个transform属性,让视图进行旋转.
//    imageview.transform = CGAffineTransformMakeRotation(rotation.rotation);
    imageview.transform = CGAffineTransformRotate(imageview.transform, rotation.rotation);
    rotation.rotation = 0;
}

4.捏合

 UIPinchGestureRecognizer *pinch = [[UIPinchGestureRecognizer alloc] initWithTarget:self action:@selector(pinchAction:)];
    [self.imageView addGestureRecognizer:pinch];
    [pinch release];
#pragma mark 通过捏合手势,等比例缩放图片.
- (void)pinchAction:(UIPinchGestureRecognizer *)pinch{
    // 通过手势找视图
    UIImageView *imageview = (UIImageView *)pinch.view;
    // 通过Transform 改变图片尺寸
    imageview.transform = CGAffineTransformScale(imageview.transform, pinch.scale, pinch.scale);
    pinch.scale = 1;// 给它终止的一个尺寸,不让照片直接消失.=
}

5. 拖拽

UIPanGestureRecognizer *pan = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(panAction:)];
    [self.imageView addGestureRecognizer:pan];
// 手势需要指定方向.
    //向右划
    swipe.direction = UISwipeGestureRecognizerDirectionRight;
#pragma mark 拖拽手势,让图片随着手势移动而移动.
- (void)panAction:(UIPanGestureRecognizer *)pan{
   // 通过手势找视图
    UIImageView *imageview = (UIImageView *)pan.view;
    //通过手势获得经过的点.
   CGPoint p = [pan translationInView:imageview];
    // 设置移动的位置
   imageview.transform = CGAffineTransformTranslate(imageview.transform, p.x, p.y);
    //为了防止手势在操作的时候视图消失.
    [pan setTranslation:CGPointZero inView:imageview];
}

6.轻扫

    UISwipeGestureRecognizer *swipe = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(swipeAction:)];
    [self.imageView addGestureRecognizer:swipe];
    [swipe release];

#pragma  mark 轻扫手势
- (void)swipeAction:(UISwipeGestureRecognizer *)swipe{
    if (swipe.direction == UISwipeGestureRecognizerDirectionRight ) {
        NSLog(@"xiangyou");//需要把拖拽移除.
    }
}

7.屏幕边际手势,iOS7.0之后出现的手势.

UIScreenEdgePanGestureRecognizer *screenEdge = [[UIScreenEdgePanGestureRecognizer alloc] initWithTarget:self action:@selector(screenEdgeAction:)];
    [self.imageView addGestureRecognizer:screenEdge
     ];
    [screenEdge release];

对应的方法还没有添加呢!

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-21 13:27:17

UI 06 7种手势的相关文章

5种手势工具类

5种手势工具类 1.ViewConfiguration-视图标准类 1.1.对象方法 ViewConfiguration viewConfiguration=ViewConfiguration.get(context); //获取touchSlop.该值表示系统所能识别出的被认为是滑动的最小距离 int touchSlop = viewConfiguration.getScaledTouchSlop(); //获取Fling速度的最小值和最大值 int minimumVelocity = vie

Android攻城狮 Android中更新UI的几种方式

Android中更新UI的几种方式: 1. Activity 的 runOnUiThread() 2. Handler 的 post() 3. Handler 的 sendMessage() 4. View 的 post() 1 public class FiveActivity extends Activity { 2 3 private TextView textView; 4 5 private Handler handler = new Handler() { 6 public void

Android更新UI的四种方式

前言 相信初学Android开发的朋友来说,应该都会遇到一个问题,我们开启了一个线程,在这个线程里面我们进行了更新UI的操作,也许是在TextView显示了一行文字,也许是改变了ImageView显示的图片,虽然只是看似简单并且正确的操作,但是Android系统让你的程序光荣的崩溃了,并且你还不知道为什么错,这才是最痛苦的,曾经深受这种痛苦的我,为了不再让这种痛苦蔓延下去,我决定把更新UI的几种方法给大家好好说说,让大家在Thread的run方法中可以随心所欲的更新UI,再也不用痛苦了. 实现

WPF多线程UI更新——两种方法

WPF多线程UI更新--两种方法 前言 在WPF中,在使用多线程在后台进行计算限制的异步操作的时候,如果在后台线程中对UI进行了修改,则会出现一个错误:(调用线程无法访问此对象,因为另一个线程拥有该对象.)这是很常见的一个错误,一不小心就会有这个现象.在WPF中,如果不是用多线程的话,例如单线程应用程序,就是说代码一路过去都在GUI线程运行,可以随意更新任何东西,包括UI对象.但是使用多线程来更新UI就可能会出现以上所说问题,怎么解决?本文章提供两个方法:Dispatcher(大部分人使用),T

iOS事件处理之七种手势

今天为大家介绍一下IOS 的七种手势,手势在开发中经常用到,所以就简单 通俗易懂的说下, 话不多说,直接看代码: // 初始化一个UIimageView UIImageView *imageView = [[UIImageView alloc]initWithFrame:CGRectMake(100, 100, 300, 300)]; imageView.image = [UIImage imageNamed:@"12.jpg"]; // UIImageView的用户交互是默认关闭的,

Android 更新UI的两种方法——handler和runOnUiThread() - $firecat的代码足迹$ - 博客频道 - CSDN.NET

文章来源:http://www.2cto.com/kf/201302/190591.html Android 更新UI的两种方法——handler和runOnUiThread() 在Android开发过程中,常需要更新界面的UI.而更新UI是要主线程来更新的,即UI线程更新.如果在主线线程之外的线程中直接更新页面显示常会报错.抛出异常:android.view.ViewRoot$CalledFromWrongThreadException: Only the original thread th

Android 在子线程中更新UI的几种方法

第一种: new Handler(context.getMainLooper()).post(new Runnable() { @Override public void run() { // 在这里运行你要想的操作 比方直接在这里更新ui或者调用回调在 在回调中更新ui } }); context是你传过来的context对象 另外一种: // 假设当前线程是UI线程,那么行动是马上运行.假设当前线程不是UI线程,操作是公布到事件队列的UI线程 // 由于runOnUiThread是Activ

Android 更新UI的两种方法——handler和runOnUiThread(

Android 更新UI的两种方法——handler和runOnUiThread() 在Android开发过程中,常需要更新界面的UI.而更新UI是要主线程来更新的,即UI线程更新.如果在主线线程之外的线程中直接更新页面显示常会报错.抛出异常:android.view.ViewRoot$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views

探讨android更新UI的几种方法

作为IT新手,总以为只要有时间,有精力,什么东西都能做出来.这种念头我也有过,但很快就熄灭了,因为现实是残酷的,就算一开始的时间和精力非常充足,也会随着项目的推进而逐步消磨殆尽.我们会发现,自己越来越消极怠工,只是在无意义的敲代码,敲的还是网上抄来的代码,如果不行,继续找. 这就是项目进度没有规划好而导致的. 最近在做有关蓝牙的项目,一开始的进度都安排得很顺利,但是因为测试需要两部手机,而且还要是android手机,暑假已经开始了,同学们都回家了,加上我手机的蓝牙坏了,导致我的进度严重被打乱!而