iOS   发布时间:2022-03-30  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了ios – 直接访问CGRect值与在Swift中规范化它们 – Objective-C规则仍然有效吗?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
关于 Swift中新的CGSize初始化程序的前一个问题,这个问题的灵感来自 Andrew Carter’s comment.

Apple Docs for CGGeometry说:

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 -10
CGRectGetWidth(rect) // bridged C function,normalized,returns 10
rect.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函数.

@H_618_42@

大佬总结

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

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

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。