CocoaTouch:框架和边界

用户界面是应用程序开发中最重要的部分之一。 我们的工作是创造出色的用户体验,以与其他应用程序脱颖而出。 但是,让我们先深入基础知识。

对于UI组件,我们必须考虑两件事:

  1. 我的元素有多大?
  2. 应该放在哪里?

我的元素有多大?

您必须考虑UI元素的宽度高度 。 Core Graphics为该用例提供了一个结构。

  CGSize结构{ 
CGFloat宽度;
CGFloat高度;
};

应该放在哪里?

UI元素使用坐标系定位。 这开始于(在iOS中)屏幕的左上角。 用CGPoint结构指定位置。

  CGPoint结构体{ 
CGFloat x;
CGFloat y;
};

两者在一起

现在我们有了大小和位置。 两者结合形成一个“矩形”。 还有一个同时包含信息的结构,称为CGRect

  struct CGRect { 
CGPoint起源;
CGSize大小;
};

仔细研究源代码,我们将看到矩形是一个包含已知结构(CGSize和CGPoint)的结构

让我们创建一个新的UIView。 将矩形(大小和位置)指定为CGRect并将其作为参数传递给构造函数。

let rect = CGRect(x: 70, y: 70, width: 160, height: 100) 
let myView = UIView(frame: rect)

我们的视图将放置在距离左侧70个点的位置,也将放置在距父视图顶部70个点的位置。 宽度为160点,最高为100点。

我们刚刚指定的位置是相对于其超级视图坐标系的。 如果您有一个简单的View Controller,这将是整个屏幕。 例如,如果将rect添加到Table Cell,则超级视图将是该单元格; 因此它将相对于像元坐标系放置。

此值(位置和大小)存储在frame属性中。 这实际上是在创建UIView实例时发生的情况。 这是您的东西被吸引到的框架。

界线

绘制到框架中时,有时情况可能与框架不完全匹配。

因此,乍一看,还有另一个看起来很相似的属性。 它指定视图的边界 。 它相对于自己的坐标系。 这意味着如果没有其他指定,则X和Y值通常为0/0。 在这种简单情况下,宽度和高度相似,因为框架已完全填充。

例如,当我们旋转视图时,这些值会有所不同。 红色显示的区域是绘制矩形的框架 。由于旋转了该框架,因此该框架的区域比实际的填充视图宽且高。

什么时候使用什么?

定义UIView时必须指定框架(手动) 。 但是,在使用现有的UIView时,最好使用边界。

想象一下,黄色矩形是一幅图像,在左下角我们想要一个文本。 如果引用frame属性,它将被精确地绘制在左下角。 在第一个示例中,它将很好地工作。 但是,当涉及旋转示例时,文本将在图像外部。