我正在快速编写一个程序,刚才我注意到,我可以直接访问CGRect帧的宽度和高度属性,而无需使用CGSize宽度和高度。也就是说,我现在可以写这样的代码了。
@IBOutlet var myView: UIView!
override func viewDidLoad()
{
super.viewDidLoad()
var height = myView.frame.height
var height1 = myView.frame.size.height
}在目标C中,当我试图编写相同的代码时,height = view.frame.height行抛出了一个错误。有人能告诉我这两行代码的区别(如果有的话)吗?
发布于 2014-12-02 07:17:51
我刚刚查看了CGRect结构引用。在Swift中,定义了一个具有成员height和width的扩展。请看下面的代码
struct CGRect {
var origin: CGPoint
var size: CGSize
}
extension CGRect {
...
var width: CGFloat { get }
var height: CGFloat { get }
...
}这样您就可以直接从一个height和width值中获取CGRect。正如您所看到的,这些只是getters,所以如果您尝试使用view.frame.height = someValue设置这些值,您将得到一个错误。
发布于 2017-07-15 15:41:58
frame具有CGRect结构,除了其width和height只有getters外,只能是阳性。从文件中:
不管高度是以正数还是负数形式存储在CGRect数据结构中,该函数返回的高度就好像矩形是标准化的一样。也就是说,结果从来不是一个负数。
但是,从文档来看,size是CGSize结构的:
CGSize结构有时用于表示距离向量__,而不是物理大小。作为向量,它的值可以是负值__。若要使standardized结构规范化,使其大小由正值表示,请调用CGRect函数。
所以差别是很明显的。
发布于 2017-09-28 20:44:10
在目标C中,当我试图编写相同的代码时,
height = view.frame.height行抛出了一个错误。有人能告诉我这两行代码的区别(如果有的话)吗?
H定义了几种类型,其中包括C struct CGRect。这个结构有两个成员:起源和大小。
这就是你在C(和Objective)中使用点符号所能访问的全部内容。C和Objective都不提供对结构的扩展。
Swift将类型导入为Swift结构。不同之处在于,Swift 确实允许对结构进行扩展。因此,它公开了几个免费的C函数作为扩展:
CGRectGetMinX() — CGRect.minX
CGRectGetMidX() — CGRect.midX
CGRectGetMaxX() — CGRect.maxX
CGRectGetWidth() — CGRect.width
[... same for y]这些C函数自古以来就存在--它们只是生活在CoreGraphics的一个尘土飞扬的角落。
它们非常有用,但您必须了解它们的语义(与标准访问器略有不同):它们使维度规范化。
这意味着,它们将负宽度或负高度的rect转换为覆盖相同面积的正大小和偏移原点的rect。
let rect = CGRect(x: 0, y: 0, width: 10, height: -10)
assert(rect.width == rect.size.width) // OK
assert(rect.height == rect.size.height) // boomhttps://stackoverflow.com/questions/27243451
复制相似问题