ios – 直接访问CGRect值与在Swift中规范化它们 – Objective-C规则仍然有效吗?

ios – 直接访问CGRect值与在Swift中规范化它们 – Objective-C规则仍然有效吗?,第1张

概述关于 Swift中新的CGSize初始化程序的前一个问题,这个问题的灵感来自 Andrew Carter’s comment. Apple Docs for CGGeometry说: … your applications should avoid directly reading and writing the data stored in the CGRect data structure. 关于 Swift中新的CGSize初始化程序的前一个问题,这个问题的灵感来自 Andrew Carter’s comment.

Apple Docs for CGGeometry说:

… your applications
should avoID directly reading and writing the data stored in the
CGRect data structure. Instead,use the functions described here to
manipulate rectangles and to retrIEve their characteristics.

Apple建议不直接访问CGRect中的数据仍然对Swift有效吗?为什么要使用CGRectGetMIDX,CGRectGetWIDth等代替直接访问CGRect结构的值,当这些属性现在使用Swift在CGRect上的新扩展时公开?

解决方法 考虑具有负宽度和高度的非标准CGRect:

var rect = CGRect(x: 0.0,y: 0.0,wIDth: -10.0,height: -10.0)

根据Apple文档,这是一个有效的矩形,因为“原点为[0.0,0.0]且大小为[10.0,10.0]的矩形完全等同于原点为[10.0,10.0]的矩形和大小为[-10.0,-10.0].“

您可以通过调用Objective-C中的旧内联CGRectStandardize方法或CGRect的Swift扩展上提供的任何新方法来标准化此CGRect:

CGRectStandardize(rect) // {x -10 y -10 w 10 h 10}rect.standardized // {x -10 y -10 w 10 h 10}rect.standardizeInPlace() // {x -10 y -10 w 10 h 10}

可是等等!这将重新定位坐标平面上的矩形,不仅使宽度和高度为正,而且使原点为负,以反映矩形的初始位置及其负宽度和高度.

内联CGRectGet函数提供了一个接口,用于规范化rect的特定值,而不更改其原点. Swift提供了对CGRect的扩展,因此您可以直接访问规范化值,而不是使用CGGeometry提供的传统C方法:

var rect = CGRect(x: 0.0,height: -10.0)rect.size.wIDth // non-normalized,returns -10CGRectGetWIDth(rect) // brIDged C function,normalized,returns 10rect.wIDth // new from Swift extension on CGRect,returns 10

新界面:

extension CGRect {    // ...    public var wIDth: CGfloat { get }    public var height: CGfloat { get }    public var minX: CGfloat { get }    public var mIDX: CGfloat { get }    public var maxX: CGfloat { get }    public var minY: CGfloat { get }    public var mIDY: CGfloat { get }    public var maxY: CGfloat { get }    // ...}

所以答案是肯定的,Objective-C中CGRect的相同规则也适用于Swift.这里唯一的区别是Swift提供了一些CGGeometry结构的扩展,它允许你远离从CGGeometry头部桥接的旧的内联C函数.

总结

以上是内存溢出为你收集整理的ios – 直接访问CGRect值与在Swift中规范化它们 – Objective-C规则仍然有效吗?全部内容,希望文章能够帮你解决ios – 直接访问CGRect值与在Swift中规范化它们 – Objective-C规则仍然有效吗?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1077691.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-27
下一篇 2022-05-27

发表评论

登录后才能评论

评论列表(0条)

保存