实战1.1 - 实现一个视图的手势控制

1、打开 Xcode,新建一个 Single View Application 项目,给该项目命名为 GesturesAndTouches。

2、在刚刚建立好的项目中,创建三个文件夹(Option + Command + n),分别命名为 Model、View、Controller。(对项目文件进行合理的归类)

3、在 View 文件夹中新建一组文件(Command + n),文件的模板选择 Cocoa Touch Class,把文件命名为 DragView,继承自 UIImageView 。在这里,我们创建了一个名为 DragView的视图类,它是 UIImageView 的子类。

4、在 DragView.m 文件中写入如下代码:

    @implementation DragView
    {
        CGPoint startLocation;
    }
    
    // 初始化方法
    - (id)initWithImage:(UIImage *)image {
    
        self = [super initWithImage:image];
        if (self) {
            
            // 在初始化成功后,让该 DragView 实例对象具备可交互性(即让其具备相应手势的能力)
            self.userInteractionEnabled = YES;
        }
        
        return self;
    }

    // Responder 类中的接口方法
    // 当用户在屏幕上刚刚开始触摸时,该接口方法被触发
    - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
    
        // 计算并且存储偏移量, 把相应触控的视图置顶
        startLocation = [[touches anyObject] locationInView:self];
        [self.superview bringSubviewToFront:self];
    }
    
      // Responder 类中的接口方法
      // 当用户在屏幕上的触摸处于移动状态,该接口方法被触发
      // 该方法实际上在一次触摸移动过程中会被调用很多次
    - (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {
        
        // 计算偏移量
        CGPoint point = [[touches anyObject] locationInView:self];
        float dx = point.x - startLocation.x;
        float dy = point.y - startLocation.y;
        
        // 计算视图新的中心点坐标
        CGPoint newCenter = CGPointMake(self.center.x + dx, self.center.y + dy);
        
        // 确定视图新的位置
        self.center = newCenter;
    }

5、导入一张图片到项目,button.png (注意勾选正确的文件选项,Copy items if needed、Create groups,确保是把这场图片复制了一份到我们的项目,而不是一个索引。如果复制过来的是一个索引,当我们的项目文件在其他Mac上打开时,是找不到这个图片文件的,会提示文件缺失。其他文件的增添与此同理)。
button.png

6、接下来,我们开始使用刚才创建的 DragView。在 ViewController.m 文件中写入如下代码:

    - (void)viewDidLoad {
        [super viewDidLoad];
        // Do any additional setup after loading the view, typically from a nib.
        
        // 创建一个 DragView 实例对象,并以 button.png 这张图片来初始化
        DragView *dragView = [[DragView alloc] initWithImage:[UIImage imageNamed:@"button"]];
        // 添加到控制器的视图上
        [self.view addSubview:dragView];
    }
实战1.1 - 实现一个视图的手势控制_第1张图片
移动前
实战1.1 - 实现一个视图的手势控制_第2张图片
移动后
总结:单独创建了一个DragView类,其继承自 UIImageView 的类,对该类进行可响应手势的编码。随后,在项目自带的控制器类中的接口方法 -(void)viewDidLoad: 中,创建DragView的实例对象,并且显示在该控制器实例的视图上。

你可能感兴趣的:(实战1.1 - 实现一个视图的手势控制)