美文网首页
判断一个View的上下左右

判断一个View的上下左右

作者: Mossion | 来源:发表于2016-09-20 18:30 被阅读10次

    嗯,名字不好取,实在不知道应该怎么起个好名字。先讲讲需求吧,当时需要的是做一个遥控器功能的,分上,下,左,右和中。然后产品设计的是类似于以下的UI


    direction.png
       嗯,然后开始动手,我的做法是,单独用一个imageView来写,将图放在这个imageView里,上代码:
    
    - (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{
        [super touchesBegan:touches withEvent:event];
        UITouch *touch = [touches anyObject];
        CGPoint p = [touch locationInView:self];
        NSLog(@"point:%@",NSStringFromCGPoint(p));
        
        // 获取p点的坐{px,py}
        CGFloat px = p.x;
        CGFloat py = p.y;
        // 当前视图的长宽
        CGFloat w = self.frame.size.width;
        CGFloat h = self.frame.size.height;
        
        // 取得 直线x1 = px 与 直线 y = h/w * px 的交点y1, 与直线 y = -(h/w) * px + h 的交点y2
        CGFloat y1 = (h/w) * px;
        CGFloat y2 = -(h/w) * px + h;
        
        // 判断,因为iOS坐标系左上角为原点
        if (y1 < y2) {
            // 可能会在左边,下边,上边
            if (py < y1) {
                NSLog(@"上");
            }
            if (py > y2) {
                NSLog(@"下");
            }
            if (py > y1 && py < y2) {
                NSLog(@"左");
            }
        }
        if (y1 > y2) {
            // 可能会在上边,下边,右边
            if (py < y2) {
                NSLog(@"上");
            }
            if (py > y1) {
                NSLog(@"下");
            }
            if (py > y2 && py < y1) {
                NSLog(@"右");
            }
        }
    }
    

    其实就是一个一元一次方程,这样子上下左右就分出来了,中心的话,判断一下当前点是否在你设定的中心圆之内就OK了。

    相关文章

      网友评论

          本文标题:判断一个View的上下左右

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