首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么UIView的边界是CGRect而不是CGSize?

这个问题涉及到了iOS开发中的UIView和CGRect、CGSize等概念。UIView是iOS开发中用于创建和管理用户界面元素的核心类,而CGRect和CGSize是用于描述矩形和大小的数据结构。

UIView的边界是CGRect而不是CGSize的原因是,CGRect包含了一个矩形的位置和大小信息,而CGSize只包含了大小信息。UIView的边界需要描述一个矩形的位置和大小,因此使用CGRect更加合适。

具体来说,UIView的边界是由一个CGRect数据结构来表示的,其中包含了UIView在父视图中的位置(origin)和大小(size)。origin表示UIView在父视图中的左上角坐标,而size表示UIView的宽度和高度。

使用CGRect来表示UIView的边界可以方便地处理视图的位置和大小信息,而使用CGSize则无法描述位置信息,因此在UIView中使用CGRect来表示边界是更加合理和高效的选择。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

微服务的边界 (粒度) 是 决策, 而不是个 标准答案

微服务的边界 (粒度) 是 "决策",而不是个 "标准答案"。 许多人面对微服务时,往往都会纠结着一个问题:微服务太小?太大?...其实,会纠结在这个问题上,最根本的原因便是误解了微服务粒度划分这件事的本质;微服务划分本身是 "架构设计"。也就是说微服务划分本身绝不是一个只讲"太大"或 "太小"标准答案的 "是非题"。...而是需综合考量以下的因素,所作出的一个 "架构决策": 1. 市场业务的扩展性 2. 与已有架构间的冲突 3. 开发团队在开发上所可能面临的风险 4....测试人员测试执行的效率 所以,请不要再简单粗暴的便脱口而出:你的微服务划得太细、太小......而是应该将各微服务划分的方式,深度思考,周全的考量各方面的因素下,所作出的一个 ”最适合” 的架构决策,而不是一个人芸亦芸的 ”标准答案”。 ?

1.5K60

为什么 useState 返回的是 array 而不是 object?

[count, setCount] = useState(0) 这里可以看到 useState 返回的是一个数组,那么为什么是返回数组而不是返回对象呢?...为什么是返回数组而不是返回对象 要弄懂这个问题要先明白 ES6 的解构赋值,来看 2 个简单的例子: 数组的解构赋值 const foo = [1, 2, 3]; const [one, two, three...,这个问题就很好解释了 如果 useState 返回的是数组,那么使用者可以对数组中的元素命名,代码看起来也比较干净 如果 useState 返回的是对象,在解构对象的时候必须要和 useState 内部实现返回的对象同名...总结 useState 返回的是 array 而不是 object 的原因就是为了降低使用的复杂度,返回数组的话可以直接根据顺序解构,而返回对象的话要想使用多次就得定义别名了 首发自:为什么 useState...返回的是 array 而不是 object?

2.3K20
  • 为什么是int main()而不是void main()

    C/C++ 小误区:void main() 这是基于我们学校老师一直使用void main(),而发的感慨,大一学习C语言时,我就在想,老师上课演示的为什么一直用void main(),而不是int main...C 在C89 中,main( ) 是可以接受的的经典巨著(C程序设计语言第二版)用的就是main( )不过在最新的C99 标准中,只有以下两种定义方式是正确的: int main( void ) int...,我还是建议大家最好在main函数的最后加上return语句,虽然没有这个必要,但这是一个好的习惯注意,vc6不会在目标文件中加入return 0;,大概是因为vc6是98年的产品,所以才不支持这个特性现在明白我为什么建议你最好加上...这当然也不是标准 C/C++ 里面定义的东西!...char *envp[] 是某些编译器提供的扩展功能,用于获取系统的环境变量因为不是标准,所以并非所有编译器都支持,故而移植性差,不推荐使用 ******************************

    3.6K70

    为什么是删除缓存,而不是更新缓存?

    原因很简单,很多时候,在复杂点的缓存场景,缓存不单单是数据库中直接取出来的值。 比如可能更新了某个表的一个字段,然后其对应的缓存,是需要查询另外两个表的数据并进行运算,才能计算出缓存最新的值的。...另外更新缓存的代价有时候是很高的。是不是说,每次修改数据库的时候,都一定要将其对应的缓存更新一份?也许有的场景是这样,但是对于比较复杂的缓存数据计算的场景,就不是这样了。...举个栗子,一个缓存涉及的表的字段,在 1 分钟内就修改了 20 次,或者是 100 次,那么缓存更新 20 次、100 次;但是这个缓存在 1 分钟内只被读取了 1 次,有大量的冷数据。...其实删除缓存,而不是更新缓存,就是一个 lazy 计算的思想,不要每次都重新做复杂的计算,不管它会不会用到,而是让它到需要被使用的时候再重新计算。...如果删除缓存失败了,那么会导致数据库中是新数据,缓存中是旧数据,数据就出现了不一致。 解决思路:先删除缓存,再更新数据库。如果数据库更新失败了,那么数据库中是旧数据,缓存中是空的,那么数据不会不一致。

    17710

    iOS学习——UIView的研究

    在iOS开发中,我们知道有一个共同的基类——NSObject,但是对于界面视图而言,UIView是非常重要的一个类,UIView是很多视图控件的基类,因此,对于UIView的学习闲的非常有必要。...) 坐标空间协议UICoordinateSpace的定义,定义了坐标点(CGPoint)、坐标区域(CGRect)在两个view间的转换 UIView的主要方法和属性的定义 类方法 2个 初始化方法...) 视图快照相关的扩展 UIView (UISnapshotting)  下面是UIView.h文件的源码分析,以下内容参考自:ios开发 之 UIView详解。...而不是将旧视图从父视图移除(仅仅适用于转场动画). 70 UIViewAnimationOptionOverrideInheritedOptions...*/ 307 - (void)drawRect:(CGRect)rect; 308 309 /** 标记整个视图的边界矩形需要重绘, 调用这个方法会自动调用drawRect方法 */ 310 - (void

    2.8K80

    iOS-圆角、边框、阴影

    3)shadowOffset 阴影的方向和距离,默认是(0, -3),即阴影相对于Y轴有3个点的向上位移 4)shadowRadius 阴影的模糊度,当它的值是0的时候,阴影就和视图一样有一个非常确定的边界线...,当值越来越大的时候,边界线看上去就会越来越模糊和自然 5)shadowPath 可以通过这个属性单独于图层形状之外指定阴影的形状 阴影是绘制在layer的边界之外的,所以当我们设置masksToBounds...在解决这个问题之前,我们还需要了解阴影的另一个特性:阴影是依据view内容的外形确定的,而不是根据边界和角半径来确定,下面放张图来解释一下 ?....h里面的内容 typedef UIView *(^ConrnerCorner) (UIRectCorner corner); typedef UIView *(^ConrnerBounds) (CGRect...view的bounds属性,为什么需要传这个值呢?

    2.7K50

    为什么 Docker 和 Kubernetes 是用 Go 写的而不是 C# ?

    HahahahahaSoFunny 为什么 Docker 和 Kubernetes 工具是用 Go 写的而不是 C#? 总所周知,现在开发人员使用的很多新工具大多是用 Go 写的。...为什么不是 C# 呢? .NET 和 C# 现在功能已经很强大了,是不是社区缺少这种文化?如何才能培养一种更加开源的文化, 因为很多开发人员对 .NET 和 C# 仍然还抱有偏见。...haho5: 不确定为什么 Docker 是用 Go 写的, 但是 Kubernetes 确实是 Google 开发的, 并且 Golang 也是。...而像 C/C++ 这样的稍微低级的语言可以让您更接近硬件,对性能有要求时,这是最合适的。 我可以用螺丝刀敲打钉子很多次,也可以用锤子花很大的力气把螺丝打进去,都可以完成工作。...它从 2.0 到现在的 10.0 变化非常快,相同的代码逻辑可以用太多不同的方式编写。 而 GO 是一门简单的语言,很受欢迎,因为好的代码应该易于阅读和理解,以便成千上万的开源程序员做出贡献。

    1.1K00

    重要的是图表思维,而不是工具

    (主要是其中涉及到的细节处理很麻烦) 当然过程是花了些时间的,主要是需要慢慢打磨其中的细节,需要利用很多技术来处理图形版面的交接位置。...令我感触最深的是,想要用ggplot2随心所欲的画图,ggplot2掌握的再熟练,也只是勉强过的了技术关,而图表背后的思维和结构更考验人,更具有挑战性。...以下数据是构造模块2辅助数据: (上半部分堆积柱形图的下侧连接带数据)的辅助数据,我打算使用多边形几何对象了来模拟那些参差交错的连接带。...这就意味着我要找到每一条带子,即四边形的四个拐点坐标,并按顺序排列。) 如果你看的不是很懂,实属正常,这种笨拙的想法,我也不知道是从哪里学来的。...vie<-viewport(width=1,height=0.215,x=0.5,y=0.8) p1;print(p2,vp=vie) grid.text(label="全球茶叶消费排行榜\n喝茶最多的不是中国人

    91260

    为什么是AUC值而不是GSEA来挑选转录因子呢

    见:基因集的转录因子富集分析 通过学习,我们知道这个RcisTarget包内置的motifAnnotations_hgnc是16万行,可以看到每个基因有多个motif。...首先批量计算AUC值 如果是单细胞转录组数据里面,每个单细胞都是有一个geneLists,那么就是成千上万个这样的calcAUC分析,非常耗费计算资源和时间,就需要考虑并行处理,我们这里暂时不需要,所以直接...=1) motifs_AUC 可以看到是 24453个motifs的AUC值都被计算了: > motifs_AUC AUC for 1 gene-sets and 24453 motifs....值看起来满足正态分布,一般来说,对正态分布,我们会挑选 mean+2sd范围外的认为是统计学显著,但是作者卡的比较严格,是 mean+3sd ,示意图如下: ?...然后看看motif的详情 这个RcisTarget包内置的motifAnnotations_hgnc是16万行,可以看到每个基因有多个motif,我们挑选出来了105个moif,去这个表格里面筛选一下,

    1.2K20

    SPC控制图为什么是±3σ,而不是±2σ或±4σ?

    第二种:β风险:如果过程是异常,但也会有部分点位于控制界限内,如果抽取到这样的产品,就会被判断为正常,从而犯了第二类错误,即漏发警报。犯第二类错误的概率记为β。如何减少两类错误所造成的损失?...图片举例:举例来说,我们按照μ±3σ的规则,如果发现数据点在μ±3σ之外,我们认为这个数据点是异常的,但我们这个判定是错误的概率是α,即0.27%,少于统计学中的5%的显著性水平。...一个解决方案是:根据使两种错误造成的总损失最小的原则来确定UCL与LCL二者之间的最优间隔距离。经验证明:休哈特所提出的3σ方式较好,在不少情况下, 3σ方式都接近最优间隔距离。...因为常规控制图的设计思想是先确定犯第一类错误的概率α,再确定犯第二类错误的概率β。...这就是为什么常规控制图的异常判定准则有两类,即:点超出控制限就判异和控制限内点排列不随机判异两类。

    48030

    Java里面Join(),为什么等待的是主线程,而不是当前子线程?

    但是仔细一想,发现这个明明调用的是子线程的join()方法,按道理应该子线程等待执行才是,为什么反而是主线程等待了呢?...源码中注释说明的是等待这个线程终止,那就是等待调用Join()的线程终止,再继续往下看: /** * Waits at most {@code millis} milliseconds for...注意按照程序的执行顺序,我们这里是主线程调用的Thread的Join方法,所以是判断子线程的存活状态,满足则让子线程执行,主线程来等待。...wait 等待方法是让线程进入等待队列,使用方法是 obj.wait(); 这样当前线程就会暂停运行,并且进入obj的等待队列中,称作“线程正在obj上等待”。...可以把子线程t理解为一个普通的obj对象,调用t的wait()方法,实际上就是主线程(main线程)在childThread对象的队列上等待,可以转换为如下写法进一步理解: /** * 主线程 */

    81950

    需要学习的是编程,而不是编程语言

    原翻译传送门is here 你可能在学习编程语言而不是编程本身 别对学习计算机科学(CS)不是研究计算机这种言论感到惊讶。相反的,学习CS是对自动解决问题的研究。...解决问题的是计算机科学,而不是编程。这就是为什么许多CS的学生似乎不明白自己为什么要学习算法和数学。 如果之前你有去上过CS的课程,你就不会对我这里说的话感到惊讶。...我花了十几年的时间学习各种编程语言。我学的越多,发现建立简单的东西就越难。我总有那么种感觉是我没找到合适的工具。但是,问题出在当我还没有意识到我要做的工作时,忘了寻找适合的工作而不是寻找适合的工具。...学习编程语言的问题就好比在学习木工之前去学习如何使用木工锯,锤子和各种切割机器。木工需要注意:想法、可行性分析、测量、测试和用户行为。老木工对上面提到的注意点更感兴趣,而不是锤子和钉子。...通过上面的途径,你会学到些推理的方法,但是过不了多久,你会意识到自己浪费了或者花了很长时间去学习编程。 我们是通过编程解决问题,而编程语言只是协助我们的工具。

    46130

    iOS OC swift 自定义 popover 泡泡

    popover.gif 灰色区域 底层视图 棕色 popover 泡泡不能超出的区域,popover 是不能超出屏幕或者离屏幕太近,否则效果不好。...棕色区域是可以设置的 红色 底层箭头视图的边框 白色 底层箭头视图的背景颜色 蓝色 自定义内容区域,在此区域(contentView)可以添加希望展示的内容 加号按钮 模拟了 sourceView...防止内容覆盖圆角 targetSize: CGSize /// 需要展示内容的大小,此字段一定需要重新设置 /// 并且宽高大小加上 minScreenEdg contentInset 不能大于屏幕宽高...上 /// - sourceView: 视图来源,箭头指向的视图 func dismiss() 消失 func getBestDirection(sourceRect: CGRect, size:...(sourceRect: CGRect, size: CGSize, direction: UIPopoverArrowDirection) -> Bool /// sourceRect: sourceView

    2.7K70

    为什么人工智能被认为是机遇而不是危险?

    人工智能的腾空出世,让许多人心存疑惑,这究竟对人类来说,是机遇,是挑战,还是某种未知的危险?成为了一个饱受争议的问题。...随着当前智慧城市建设的推进,人工智能技术会广泛应用于出行、医疗和日常消费领域,这对于普通人的影响还是比较直接的。另外,随着智能家居的发展,未来更多的家庭也将采用智能家居的解决方案。...当第一次工业革命——蒸汽机出现时,人们担心蒸汽机会取代我们的工作。现在,人工智能的出现,人们还是会担心它所带来的危机,当然,有后顾之忧是正确的。...但是,新技术不是让人失业,而是让人做更有价值的事情,让人不去重复自己,而是去创新,让人的工作能够进一步进化。...人工智能虽然在未来依旧有很大的发展空间,但是远远达到不了威胁人脑的地步,人类无须因人工智能而恐慌。面对新技术的威胁,与其担心、不如担当。与其担心技术夺走就业,不如拥抱技术,去解决新的问题。

    42710
    领券