为什么calculateAccumulatedFrame会给出意想不到的CGRect?

时间:2017-02-20 16:49:39

标签: ios swift sprite-kit swift3

我试图为我的节点树确定正确的缩放因子,使其完全适合我的演示矩形,所以我试图在我的所有节点周围找到最小的边界矩形。 Apple的文档说,calculateAccumulatedFrame"计算父坐标系中包含节点及其所有后代内容的矩形。"这听起来像我需要的,但它没有给我我期望的紧密配合。我完整的游乐场代码是:

import SpriteKit
import PlaygroundSupport

let view:SKView = SKView(frame: CGRect(x: 0, y: 0, width: 800, height: 800))

PlaygroundPage.current.liveView = view

let scene:SKScene = SKScene(size: CGSize(width: 1000, height: 800))
scene.scaleMode = SKSceneScaleMode.aspectFill
view.presentScene(scene)

let yellowBox = SKSpriteNode(color: .yellow, size:CGSize(width: 300, height: 300))
yellowBox.position = CGPoint(x: 400, y: 500)
yellowBox.zRotation = CGFloat.pi / 10
scene.addChild(yellowBox)

let greenCircle = SKShapeNode(circleOfRadius: 100)
greenCircle.fillColor = .green
greenCircle.position = CGPoint(x: 300, y: 50)
greenCircle.frame
yellowBox.addChild(greenCircle)

let uberFrame = yellowBox.calculateAccumulatedFrame()

let blueBox = SKShapeNode(rect: uberFrame)
blueBox.strokeColor = .blue
blueBox.lineWidth = 2
scene.addChild(blueBox)

结果如下: Playground results

蓝色矩形的左下边缘看起来不错,但为什么蓝色矩形和顶部和右边的绿色圆圈之间有间隙?

1 个答案:

答案 0 :(得分:3)

添加变换时,“框架”这个概念很有趣。框和圆周围的边界框是一个矩形。你旋转了那个矩形。因此它的角落突出。累积的框架包含旋转的矩形,包括伸出的角落。它并没有神奇地拥抱节点的绘制外观(例如圆圈)。

enter image description here