在我的应用程序中,对于一个屏幕,我正在设置大小并使 SpriteKit 节点的背景居中。例如,我将背景 subview 的大小设置如下:
backgroundNode.size = self.frame.size
虽然这适用于 iPhone 6 Plus,但 iPhone 5 的较小屏幕/较低分辨率意味着其他节点的默认大小太大而无法适合他们的场景。
如何强制其他节点符合后台节点的大小? 我想将每个 subview 的大小除以背景 subview 的大小,但不能直接在大小属性上进行数学运算。
最佳答案
SpriteKit场景(SKScene
)包含节点,节点(SKNode
),其中有 size
和 position
属性(类型分别为 CGSize
和 CGPoint
)。
UIKit UIView
. frame
和 bounds
属性是 CGRect
结构由相同的 CGSize
组成和 CGPoint
类型结构。
因此,了解如何使用 CGRect
、CGSize
和 CGPoint
确实很有帮助。
请注意,CGRect
、CGSize
和 CGPoint
作为结构,在 Swift 中,总是按值传递给函数,而不是按引用传递类是,因此您不能修改传递给函数的结构内部的字段,并且在不采取额外步骤的情况下将它们传播回结构的调用者副本。
因为大小和位置属性是复合类型,所以不能像简单的标量一样在数学和逻辑运算中使用它们;因为它们包含多个属性。
例如:
CGSize
包含width
和height
属性,CGPoint
由x
和y
属性组成。
如果要划分大小,您必须单独访问 CGSize
结构的宽度和高度属性。
您可以在一个操作中分配大小(即单个构造函数):
node.size = CGSize(
width: node.size.width / backgroundNode.size.width,
height: node.size.height / backgroundNode.size.height)
或者您可以谨慎地进行:
node.size.width = node.size.width / backgroundNode.size.width
node.size.height = node.size.height / backgroundNode.size.height
处理 CGRect
字段时,有时将其作为单个实体处理会很有用。例如,
view.frame = CGRect(x: 0, y: 0, width: 10, height: 10)
其他一些时候单独设置size
和origin
属性更实用:
view.frame.origin = CGPoint (x: 0, y: 0)
view.frame.size = CGSize (width: 10, height: 10)
甚至:
view.frame.origin.x = 0
view.frame.origin.y = 0
view.frame.size.width = 10
view.frame.size.height = 10
还值得了解每个结构的“零”静态属性,作为方便的简写等价物:
CGRect .zero ... CGRect (x: 0, y: 0, width: 0, height: 0)
CGPoint.zero ... CGPoint (x: 0, y: 0)
CGSize .zero ... CGSize (width: 0, height: 0)
If you do a lot of adjusting of size and position, to reduce code bloat, you might consider borrowing or developing convenient Swift extensions to `CGRect, CGSize and CGPoint` to simplify applying delta values to sizes or origins.
关于ios - 如何在 Swift 中修改 SpriteKit 节点的大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41422685/