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上打开时,是找不到这个图片文件的,会提示文件缺失。其他文件的增添与此同理)。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];
}