为啥 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 【问题描述】:我想知道在使shadowOffset
的NSShadow
和CALayer
通过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阴影?