【问题标题】:SpriteKit/UIKit - How to set the position of UIView to the position of a Node?SpriteKit/UIKit - 如何将 UIView 的位置设置为节点的位置?
【发布时间】:2019-02-02 08:33:08
【问题描述】:

我创建了一个 UIImageView,它应该与关联节点具有相同的位置,但由于 UIView 的坐标不等于节点的坐标,因此视图有时位于错误的位置。

所以问题是是否有一种方法可以将图像定位在节点中并留在那里。

Here you can see the result of the code below

提前谢谢你。

import SpriteKit

class GameScene: SKScene {

var player = SKSpriteNode()
var frames : Array = [UIImage]()
var playerView = UIImageView()


override func didMove(to view: SKView) {

    player = SKSpriteNode(color: .clear , size: CGSize(width: 50,     height: 100))

    player.physicsBody = SKPhysicsBody(rectangleOf: player.size)
    player.physicsBody?.affectedByGravity = false

    for i in 1...6 {
        frames.append(UIImage(named: "playerRunLeft-\(i)")!)
        playerView.contentMode = .topLeft
    }

    player.position = CGPoint(x: 0, y: 0)

    playerView.animationImages = frames
    playerView.animationDuration = 0.5
    playerView.contentScaleFactor = 6
    playerView.frame.origin = CGPoint(x: view.center.x , y: view.center.y)
    playerView.startAnimating()

    addChild(player)
    view.addSubview(playerView)
}
}

【问题讨论】:

  • playerView.center = view.center 而不是 frame.origin。
  • 同样的结果。我必须补充一点,当节点移动时 UIImageview 应该移动到相同的位置
  • player.anchorPoint = CGPoint(0,0) 或 CGPoint(0,1)
  • 同样的结果。我正在考虑为 UIImageview 设置依赖于底层节点位置的约束,但我认为应该有更简单的方法。
  • func animate(with textures: [SKTexture], timePerFrame sec: TimeInterval) 怎么样。混合两个系统并不常见。

标签: swift uiview sprite-kit position constraints


【解决方案1】:

所以我终于找到了解决办法:

let adjustRatioY = -(view.frame.height / scene!.frame.height)*player.position.y - 24
let adjustRatioX = (view.frame.width / scene!.frame.width)*player.position.x - 15

playerView.center = CGPoint(x: view.center.x + adjustRatioX , y: view.center.y + adjustRatioY )

我用过这个功能,效果很好。如果有人遇到同样的问题:您必须手动调整 -24 和 15 以使 UIImageView 居中:

playerView.center = view.center //(adjust here)

Player.position 应为 (0/0) 以进行调整。

【讨论】:

  • 你太棒了!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-17
  • 1970-01-01
相关资源
最近更新 更多