美文网首页
iOS oc判断两个UI控件是否有重叠(交互)

iOS oc判断两个UI控件是否有重叠(交互)

作者: 毛大虎 | 来源:发表于2017-03-04 09:54 被阅读1109次

在iOS 开发中 我们有时需要判断两个UI控件是否有重合而来处理一些逻辑 举个简单的例子 看下图图片选择器 上面是一个删除按钮  此刻就需要判断 当前点击的删除按钮和当前哪个图片有重叠交集 就去删除哪张图片,以下就介绍一下常用的判断两个控件是否有重叠的方法.

1 //两个控件在相同的父视图上 以下为例子

//两个控件都是在self.view上以(0.0)为原点

UIView*view1 = [[UIViewalloc]initWithFrame:CGRectMake(0,0,100,100)];

view1.backgroundColor= [UIColoryellowColor];

self.yellowView= view1;

[self.viewaddSubview:view1];

UIView*view2 = [[UIViewalloc]initWithFrame:CGRectMake(0,180,100,100)];

view2.backgroundColor= [UIColorredColor];

self.redView= view2;

[self.viewaddSubview:view2];

//判断两个控件是否有交互:(前提是在同一个父控件上面)

BOOLisMutul =CGRectIntersectsRect(self.whiteLabel.frame,self.blackLabel.frame);

//NSLog(@"isMutul---%d",isMutul); 有交互返回1   没重叠 返回0 

// 2 第二种情况   两个控件不在同一个父控件上面  这时我们就需要把这两个父控件转换为以当前主窗口为坐标原点 判断白色按钮和黑色按钮是否有重叠(黑色label在黄色view上    白色label在红色view上面)

@interfaceViewController(){

CGRect_whiteRect;

CGRect_blackRect;

}

@property(nonatomic,weak)UIView*yellowView;

@property(nonatomic,weak)UIView*redView;

@property(nonatomic,weak)UILabel*whiteLabel;

@property(nonatomic,weak)UILabel*blackLabel;

UIView*view1 = [[UIViewalloc]initWithFrame:CGRectMake(0,0,100,100)];

view1.backgroundColor= [UIColoryellowColor];

self.yellowView= view1;

view1.alpha=0.5;

[self.viewaddSubview:view1];

UILabel*label1 = [[UILabelalloc]initWithFrame:CGRectMake(0,70,80,30)];

label1.text=@"黑色";

label1.backgroundColor= [UIColorblackColor];

label1.font= [UIFontsystemFontOfSize:15];

label1.textAlignment=NSTextAlignmentLeft;

self.blackLabel= label1;

[self.yellowViewaddSubview:label1];

UIView*view2 = [[UIViewalloc]initWithFrame:CGRectMake(0,80,100,100)];

view2.backgroundColor= [UIColorredColor];

view2.alpha=0.5;

self.redView= view2;

[self.viewaddSubview:view2];

UILabel*label2 = [[UILabelalloc]initWithFrame:CGRectMake(0,10,80,30)];

label2.backgroundColor= [UIColorwhiteColor];

label2.text=@"白色";

label2.font= [UIFontsystemFontOfSize:15];

label2.textAlignment=NSTextAlignmentLeft;

self.whiteLabel= label2;

[self.redViewaddSubview:label2];

//两个控件在不同的父视图上需要把两个控件的坐标统一转换为以window为远点的坐标轴

//方法1 一般用第一种方法

//主窗口

UIWindow*keyWindow = [UIApplicationsharedApplication].keyWindow;

//以主窗口左上角为坐标原点,计算self的矩形框

//CGRect whiteRect = [keyWindow convertRect:self.whiteLabel.frame fromView:self.redView];

//CGRect blackRect = [keyWindow convertRect:self.blackLabel.frame fromView:self.yellowView];

//方法2

// toView:nil写nil默认就表示window

CGRect whiteRect = [self.whiteLabelconvertRect:self.whiteLabel.boundstoView:nil];

_whiteRect= whiteRect;

CGRect blackRect = [self.blackLabelconvertRect:self.blackLabel.boundstoView:nil];

_blackRect= blackRect;

BOOLisjh =CGRectIntersectsRect(_whiteRect,_blackRect);

NSLog(@"isjh---%zd", isjh); 有交互返回1  没有返回0

谢谢大家   希望对你有帮组  如果对你有帮组请点个爱心吧   谢谢!

相关文章

  • iOS oc判断两个UI控件是否有重叠(交互)

    在iOS 开发中 我们有时需要判断两个UI控件是否有重合而来处理一些逻辑 举个简单的例子 看下图图片选择器 上面是...

  • iOS判断两个控件是否有重叠

    一、父控件相同的两个控件的重叠判断 图中,红色的View与蓝色的View拥有相同的父控件,都是控制器的View,即...

  • iOS-判断两个控件是否有重叠

    目录 一、父控件相同的两个控件的重叠判断二、坐标系转换三、不同父控件的两个控件的重叠判断四、总结 一、父控件相同的...

  • iOS部分控件介绍及设计规范

    iOS及Android图标按钮设计规范 UI设计师需要了解的开发中常用的UI控件(ios篇) iOS交互设计基础之...

  • 关于UIView中的坐标转换

    在开发中我们经常会需要判断两个控件是否包含重叠,此时如果控件A和B的坐标原点如果不确定的话,那么肯定会导致比较不正...

  • iOS UIView中坐标转换

    在开发中我们经常会需要判断两个控件是否包含重叠,此时如果控件A和B的坐标原点如果不确定的话,那么肯定会导致比较不正...

  • iOS交互-JavaScriptCore

    iOS交互一般有两个选择 JavaScriptCore OC调用JavaScript通过webview的strin...

  • iOS资源汇总

    iOS·Objective-C UI控件详解整理 iOS UI控件详解—「UIScrollView滚动视图」 iO...

  • 判断时间是否有重叠

    重叠一共有4种情况,设A为待比较时段 B为基准时段 ==的情况根据需要设置 https://www.luyuqia...

  • IOS-UI控件基础

    ++2016/7/11 ++by side @OC-UI控件基础 UI(user interface)介绍: U...

网友评论

      本文标题:iOS oc判断两个UI控件是否有重叠(交互)

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