Я написал пользовательский подкласс SKLabelNode, который должен применяться зачаточном «тень» на мой этикетке:Проблема с использованием подкласс SKLabelNode
class ShadowLabel: SKLabelNode {
var shadowNode: SKLabelNode
init(fontNamed font: String = "Foo", text: String, size: CGFloat, zPosition zPos: CGFloat, shadowColor: SKColor = SKColor.black, shadowOffset: CGPoint = CGPoint(x: 0, y: -4), shadowAlpha: CGFloat = 0.5) {
shadowNode = SKLabelNode(fontNamed: font)
super.init(fontNamed: font)
self.text = text
self.fontSize = size
self.zPosition = zPos
shadowNode.text = self.text
shadowNode.zPosition = self.zPosition - 1
shadowNode.fontColor = shadowColor
shadowNode.position = shadowOffset
shadowNode.fontSize = self.fontSize
shadowNode.alpha = 0.5
self.addChild(shadowNode)
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
func setNewText(_ newText: String) {
self.text = newText
self.shadowNode.text = newText
}
}
Моя проблема в том, что во время выполнения, консоль дает мне следующее сообщение об ошибке:
use of unimplemented initializer 'init()' for class 'MyProject.ShadowLabel'
Я использую пользовательский подкласс в классе GameScene следующим образом:
class GameScene: SKScene {
var scoreLabel = (ShadowLabel(fontNamed: "Foo", text: "", size: 100, zPosition: 150, shadowColor: SKColor.black, shadowOffset: CGPoint(x: 0, y: -4), shadowAlpha: 0.5))
override func didMove(to view: SKView) {
scoreLabel.text = "\(gameScore.totalScore)" // a struct which counts the game score
scoreLabel.color = SKColor.white
scoreLabel.fontSize = 100
scoreLabel.zPosition = 150
scoreLabel.position = CGPoint(x: Scene.width/2, y: Scene.heigth - 40 - scoreLabel.frame.height)
addChild(scoreLabel)
}
}
Я не знаю, почему вызов с параметром-пустой init() выполняется в первую очередь.
Любое предложение?
Здравствуйте, благодарю вас за ответ. Как вы сказали, переопределив init(), я теряю все содержимое, которое я создал в своем пользовательском инициализаторе, что делает мой класс неубедительным. – gionti
Я полагаю, вы могли бы сделать shadowNode nillable, и тогда вам не пришлось бы возиться с ним в init? Я не уверен, что это считается проблемой с моим решением или проблемой с вашим первоначальным внедрением, поскольку я сказал, что лично не буду обращаться к узлам. – ThrowingSpoon
Я не думал о том, чтобы рассматривать shadowNode как необязательный, спасибо за идею! Во всяком случае, теперь я нашел неэстетичное обходное решение для решения проблемы, которое я опубликую через несколько минут. – gionti