zoukankan      html  css  js  c++  java
  • 实现点击图片不同区域响应不同的事件

    最近有一个遥控器的项目, 需要实现点击图片上指定位置响应不同事件

    图片如下: 

    大概目的是点击图片上的温度可以直接改变空调温度

    大概思路就是先通过gesture获取点击的点坐标, 然后对坐标做处理.

    开始考虑以纵轴为0度, 计算点击坐标跟中心点连线并计算跟纵轴的角度来判断,  不过代码写好后发现在不同的设备上有误差

    所以就改用将图片分成一个个的格子, 然后判断触摸点在哪一个格子上面

    下面来说说做法:

    首先把图片放到一个表格中, 调增好表格的缩放大小刚好图片边缘压在单元格线上

    如图:

    从这里可看到, 将图片分割成 高度: 43个单位  宽度: 9个单位

    然后做个记录每个点在哪些单元格上面:

    我的记录如下:

    然后我们可以写代码,  给ImageView添加一个手势

       self.bgImg.userInteractionEnabled = YES;
        [self.bgImg addGestureRecognizer:[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tempTapAction:)]];

    从gesture获取转换后的坐标并做判断:

    - (void)tempTapAction:(UIGestureRecognizer *)tapGesture {
        
        float xunit = self.bgImg.frame.size.width / 9;
        float yunit = self.bgImg.frame.size.height / 43;
        
        CGPoint point;
        point = [tapGesture locationInView:self.bgImg];
    //    NSLog(@"点击: %@", NSStringFromCGPoint(point));
        
        if (point.x < xunit * 2 && (point.y > yunit * 27 && point.y < yunit * 31)) {
            
            NSLog(@"16度");
            _temper = 16;
        }
        
        else if (point.x < xunit * 2 && (point.y > yunit * 22 && point.y < yunit * 26)) {
            
            NSLog(@"17度");
            _temper = 17;
        }
        
        else if (point.x < xunit * 2 && (point.y > yunit * 17 && point.y < yunit * 21)) {
            
            NSLog(@"18度");
            _temper = 18;
        }
        
        else if (point.x < xunit * 2 && (point.y > yunit * 12 && point.y < yunit * 16)) {
            
            NSLog(@"19度");
            _temper = 19;
        }
        
        else if ((point.x < xunit * 3 && point.x > xunit * 1) && (point.y > yunit * 8 && point.y < yunit * 12)) {
            
            NSLog(@"20度");
            _temper = 20;
        }
        
        else if ((point.x < xunit * 3 && point.x > xunit * 2) && (point.y > yunit * 5 && point.y < yunit * 9)) {
            
            NSLog(@"21度");
            _temper = 21;
        }
        
        else if ((point.x < xunit * 4 && point.x > xunit * 3) && (point.y > yunit * 3 && point.y < yunit * 7)) {
            
            NSLog(@"22度");
            _temper = 22;
        }
        
        else if ((point.x < xunit * 5 && point.x > xunit * 4) && (point.y > yunit * 2 && point.y < yunit * 6)) {
            
            NSLog(@"23度");
            _temper = 23;
        }
        
        else if ((point.x < xunit * 6 && point.x > xunit * 5) && (point.y > yunit * 3 && point.y < yunit * 7)) {
            
            NSLog(@"24度");
            _temper = 24;
        }
        
        else if ((point.x < xunit * 7 && point.x > xunit * 6) && (point.y > yunit * 5 && point.y < yunit * 9)) {
            
            NSLog(@"25度");
            _temper = 25;
        }
        
        else if ((point.x < xunit * 8 && point.x > xunit * 6) && (point.y > yunit * 8 && point.y < yunit * 12)) {
            
            NSLog(@"26度");
            _temper = 26;
        }
        
        else if ((point.x < xunit * 9 && point.x > xunit * 7) && (point.y > yunit * 12 && point.y < yunit * 16)) {
            
            NSLog(@"27度");
            _temper = 27;
        }
        
        else if ((point.x < xunit * 9 && point.x > xunit * 7) && (point.y > yunit * 17 && point.y < yunit * 21)) {
            
            NSLog(@"28度");
            _temper = 28;
        }
        
        else if ((point.x < xunit * 9 && point.x > xunit * 8) && (point.y > yunit * 22 && point.y < yunit * 26)) {
            
            NSLog(@"29度");
            _temper = 29;
        }
        
        else if ((point.x < xunit * 9 && point.x > xunit * 7) && (point.y > yunit * 27 && point.y < yunit * 31)) {
            
            NSLog(@"30度");
            _temper = 30;
        }
        
        // 调用修改温度方法    
    }
  • 相关阅读:
    Redis源码解析:28集群(四)手动故障转移、从节点迁移
    Redis源码解析:27集群(三)主从复制、故障转移
    Redis源码解析:26集群(二)键的分配与迁移
    centos 6.5 安装composer
    Centos安装php高版本
    CentOS快速搭建LAMP环境
    封装类似thinkphp连贯操作数据库的Db类(简单版)。
    php封装pdo操作数据的工具类
    php中使用mysqli和pdo扩展,测试mysql数据库的执行效率。
    php中使用mysqli和pdo扩展,测试连接mysql数据库的效率。
  • 原文地址:https://www.cnblogs.com/zhouxihi/p/7137257.html
Copyright © 2011-2022 走看看