gpt4 book ai didi

swift - 如何将 SKSpriteNode 放在 CAShapeLayer 前面?

转载 作者:搜寻专家 更新时间:2023-10-31 22:41:32 24 4
gpt4 key购买 nike

我想在 CAShapeLayer 前面显示一个 SKSpriteNode,这是我正在使用的代码:

import SpriteKit
import GameplayKit
import UIKit

class GameScene: SKScene {

let progressLayer = CAShapeLayer()

override func didMove(to view: SKView) {

let circle = UIView(frame: CGRect(x: 0, y: 0, width: self.size.width, height: self.size.height))
view.addSubview(circle)
view.sendSubview(toBack: circle)

progressLayer.frame = view.bounds
progressLayer.path = progressPath.cgPath

progressLayer.fillColor = UIColor.clear.cgColor
progressLayer.strokeColor = UIColor.green.cgColor
progressLayer.lineWidth = 20.0

let animation2 = CABasicAnimation(keyPath: "strokeEnd")
animation2.fromValue = 0.0
animation2.toValue = 1.0
animation2.duration = 1
animation2.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseOut)

progressLayer.add(animation2, forKey: "drawLineAnimation")

circle.layer.addSublayer(progressLayer)

var popup = SKSpriteNode(imageNamed: "popupWorking.png")
popup.anchorPoint = CGPoint(x: 0.5, y: 0.5)
popup.position = CGPoint(x: self.size.width/2, y: self.size.height/2)
popup.size = CGSize(width: 400, height: 200)
popup.zPosition = 10
self.addChild(popup)
}
}

但是当我运行代码时,CAShapeLayer出现在SKSpriteNode的前面,如何让SKSpriteNode出现在CAShapeLayer的前面?

最佳答案

您需要在 View Controller 级别更改 View 层次结构。默认情况下, View Controller 的 View 是一个 SKView。如果你想在你的 SKView 后面放置一个不同的 UIView,你需要调整 View 层次结构。

将 View Controller 的 View 修改为 UIView 而不是 SKView。然后,将形状图层的 View 作为 subview 添加到该主视图。之后,将您的 SKView 添加为主视图的 subview 。

您的新 View 层次结构应如下所示:

View Controller
– view (UIView)
- circle view (UIView with your CAShapeLayer as a sublayer)
- spritekit view (SKView)

虽然可以通过这种方式组合 UIKitSpriteKit,但留在 SpriteKit 世界中并重新创建使用 SKSpriteNode 而不是 CAShapeLayer 的圆形动画。

关于swift - 如何将 SKSpriteNode 放在 CAShapeLayer 前面?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45508776/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com