我有两个背景图片:background.png(1920 x 1280)和background@2x.png(3840 x 2560)。此外,应用程序仅适用于横向模式。
在运行时,我的背景图片的大小是最大值
问题:我尝试使用捏合手势方法向控制台打印高度和背景图像,但在每次打印时,两个值都保持在4001.999 .. x 2668.0,即使我的背景图像的大小确实如此在收入和收出时调整大小。
我想要完成的是:访问包含我的背景图像的SKSpriteNode的宽度和高度,以便我可以检查它的高度是否等于屏幕的高度。如果是,它会禁用进一步放大的捏合手势的效果。我也想管理相同的效果,但是要缩小。
如果有人可以提出更好的算法,请随时分享。谢谢!
这是我的代码:
// Background
backgroundNode = createBackground()
self.addChild(backgroundNode)
println("anchorPoint = \(self.anchorPoint)")
}
override func didMoveToView(view: SKView) {
let pinchRecognizer = UIPinchGestureRecognizer(target: self, action: Selector("pinchView:"))
pinchRecognizer.delegate = self
view.addGestureRecognizer(pinchRecognizer)
}
// NODES
func createBackground() -> SKNode {
let backgroundNode = SKNode()
let node = SKSpriteNode(imageNamed: "background/background")
node.name = "bg"
node.setScale(scaleFactor)
backgroundNode.addChild(node)
return backgroundNode
}
// GESTURES
func pinchView(sender: UIPinchGestureRecognizer) {
let minScale: CGFloat = 0.15
let maxScale: CGFloat = 3
let tempScale = backgroundNode.xScale * sender.scale
let pinch: SKAction = SKAction.scaleBy(sender.scale, duration: 0.0)
if tempScale > minScale && tempScale < maxScale {
backgroundNode.runAction(pinch)
sender.scale = 1.0
}
var width = backgroundNode.childNodeWithName("bg")?.self.frame.size.width
var height = backgroundNode.childNodeWithName("bg")?.self.frame.size.height
println("width: \(width)") // 4001.999...
println("height: \(height)") // 2668.0
}
override func touchesMoved(touches: Set<NSObject>, withEvent event: UIEvent) {
if touches.count == 1 {
for touch: AnyObject in touches {
let prevLoc: CGPoint = touch.previousLocationInView(view)
let curentLoc: CGPoint = touch.locationInView(view)
let deltaX: CGFloat = curentLoc.x - prevLoc.x
let deltaY: CGFloat = curentLoc.y - prevLoc.y
backgroundNode.position.x += deltaX
backgroundNode.position.y -= deltaY
}
}
}
答案 0 :(得分:1)
该问题的评论中讨论的答案是缩放精灵节点本身,而不是其父SKNode
。由于SKNode
没有任何视觉内容(请参阅&#34;节点特征&#34;)SKNode
frame
属性的Apple's discussion。 ,其帧大小为(width: 0, height: 0)
。请注意,如果SKNode
中的所有可视节点都需要边界矩形,则calculateAccumulatedFrame()
方法可用。