Использование ООП! Я реализовал это как новый компонент, потомок SKNode, который содержит два SKLabelNodes, один для самого текста, а другой для его тени:
final class TgSKLabelWithShadow: SKNode
{
private var lblText: SKLabelNode!
private var lblShadow: SKLabelNode!
var text: String?
{ get { return lblText.text }
set { lblText.text = newValue
lblShadow.text = newValue } }
var fontColor: UIColor?
{ get { return lblText.fontColor }
set { lblText.fontColor = newValue } }
// define additional getters/setters, if necessary.
init( position: CGPoint,
alignment: SKLabelHorizontalAlignmentMode,
text: String,
fontName: String,
fontSize: CGFloat,
fontColor: UIColor,
shadowColor: UIColor,
shadowOffSet: CGPoint)
{
super.init()
self.position = position
lblShadow = SKLabelNode(text: text)
lblShadow.fontName = fontName
lblShadow.fontColor = shadowColor
lblShadow.fontSize = fontSize
lblShadow.horizontalAlignmentMode = alignment
lblShadow.position = shadowOffSet
self.addChild(lblShadow) // add shadow first
lblText = SKLabelNode(text: text)
lblText.fontName = fontName
lblText.fontColor = fontColor
lblText.fontSize = fontSize
lblText.horizontalAlignmentMode = alignment
self.addChild(lblText) // on top of shadow
}
required init?(coder aDecoder: NSCoder)
{
fatalError("TgSKLabelWithShadow - init(coder:) has not been implemented")
}
}
Instantiate и добавить к родителю (другой узел или сцены) так:
ndInfo2 = TgSKLabelWithShadow(
position: CGPoint(x: size.width/2, y: size.height - 170),
alignment : .Center,
text: "ndInfo2: ???",
fontName: "Avenir",
fontSize: 40,
fontColor: colorText,
shadowColor: UIColor.blueColor(),
shadowOffSet: CGPoint(x:1, y:-1))
addChild(ndInfo2)
Очертания? Ну, ничто не мешает вам вложить еще один SKLabelNode, чтобы установить контур. (можно было бы рассчитать его немного больше, чем метка.) Обратите внимание, что порядок добавления дочерних меток является релевантным.
Этот код был протестирован и в настоящее время активно используется в приложении Apple TV, которое я сейчас создаю. С уважением, Тед.
Отбрасывание и очертание не отличаются от светящихся. См. [Мой ответ на ваш другой вопрос об этом] (http://stackoverflow.com/a/19237349/957768), и вы можете настроить технику, чтобы получить необходимый эффект. – rickster
Да, это именно то, что пришло в голову. Но я хочу, чтобы схема была более резкой, поэтому мне нужно посмотреть, что я могу придумать. – prototypical
Размытая копия изображения создает хороший эффект свечения. Чтобы превратить это нечеткое свечение в сплошной контур, просто увеличьте альфу размытого изображения - попробуйте фильтр 'CIColorMatrix' с параметром' inputAVector' чего-то типа '[0 0 0 10]'. – rickster