美文网首页iOS Cookbook 学习笔记
实战1.1 - 实现一个视图的手势控制

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

作者: herbert | 来源:发表于2015-01-09 13:04 被阅读75次

    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];
        }
    
    移动前 移动后
    总结:单独创建了一个DragView类,其继承自 UIImageView 的类,对该类进行可响应手势的编码。随后,在项目自带的控制器类中的接口方法 -(void)viewDidLoad: 中,创建DragView的实例对象,并且显示在该控制器实例的视图上。

    相关文章

      网友评论

        本文标题:实战1.1 - 实现一个视图的手势控制

        本文链接:https://www.haomeiwen.com/subject/eqvxxttx.html