为啥 NSShadow 和 CALayer 的 shadowOffset 通过 CGSize 类型而不是 CGPoint 类型表示

Posted

技术标签:

【中文标题】为啥 NSShadow 和 CALayer 的 shadowOffset 通过 CGSize 类型而不是 CGPoint 类型表示【英文标题】:Why NSShadow's and CALayer's shadowOffset expressed via CGSize type and not CGPoint type为什么 NSShadow 和 CALayer 的 shadowOffset 通过 CGSize 类型而不是 CGPoint 类型表示 【发布时间】:2021-06-30 12:57:11 【问题描述】:

我想知道在使shadowOffsetNSShadowCALayer 通过CGSize 类型而不是CGPoint 类型表达的背后是否有历史推理(或任何推理)

我相信,就其含义而言,“阴影偏移”是一个向量,指向与layer.frame.origin(或layer.bounds.origin)相关的阴影原点。所以用CGPoint 代替CGSize 似乎更方便。

提前致谢!

【问题讨论】:

CGSize 的documentation 稍微提到了这一点。注意“距离向量”这个词。我认为使用具有实际长度的东西(例如宽度和高度)来表示距离而不是没有长度的点会更合适。 @Sweeper 感谢您的参考。但这只会引出更进一步的问题——“Apple 为什么选择使用 CGSize 来表示向量(包括负值)?” 你似乎没有明白我的意思。关键词是“距离”。 shadowOffset 是一个距离向量。尺寸有宽度和高度,它们更像是距离,而不是点的 x 和 y。 【参考方案1】:

点是坐标空间中的一个位置。大小描述 x&y 维度中的距离。

如果您将 CGPoint 用于 shadowOffset,则它需要是相对于其他点的点。什么点?阴影路径的中心?起源?就边界而言,还是框架?

偏移量是二维的量。一个点就是一个位置。将CGSize 用于shadowOffset 对我来说非常有意义,而使用一个点是有意义的。

【讨论】:

知道了。谢谢!

以上是关于为啥 NSShadow 和 CALayer 的 shadowOffset 通过 CGSize 类型而不是 CGPoint 类型表示的主要内容,如果未能解决你的问题,请参考以下文章

为啥动画自定义 CALayer 属性会导致其他属性在动画期间为零?

为啥必须使用 CALayer 的presentationLayer 进行命中测试?

为啥masksToBounds = YES会阻止CALayer阴影?

为啥 UIView Animation 不会触发 CALayer 的 addAnimation:forKey:?

为啥 CALayer 蒙版没有居中并偏离几个像素?

为啥我们不能把 UIView 的子视图放在它的 CALayer 前面?