我正在尝试在应用程序中显示精灵视图。我已经有它显示为一个视图的主要应用程序和它的工作完全正常。当我尝试使用
var characterView: some View {
SpriteView(scene: characterScene)
.frame(width: 50, height: 50)
}
展示这一景观。
下面是一些最小的代码:
// Character Animation
import Foundation
import SpriteKit
class CharacterScene: SKScene {
let characterName: String
init(characterName: String) {
self.characterName = characterName
super.init(size: CGSize(width: 300, height: 400))
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
var textures: [SKTexture] = []
override func didMove(to view: SKView) {
let atlas = SKTextureAtlas(named: characterName)
textures = atlas.textureNames.sorted().map { atlas.textureNamed($0) }
let sprite = SKSpriteNode(texture: textures[0])
let maxSize: CGFloat = 200
let aspectRatio = sprite.size.height / sprite.size.width
sprite.size = CGSize(width: min(sprite.size.width, maxSize), height: min(sprite.size.height, maxSize * aspectRatio))
sprite.position = CGPoint(x: frame.midX, y: frame.midY)
addChild(sprite)
let animation = SKAction.animate(with: textures, timePerFrame: 0.5)
sprite.run(SKAction.repeatForever(animation))
}
}
//Widget
import WidgetKit
import SwiftUI
import ActivityKit
import SpriteKit
struct CharacterIslandWidget: Widget {
var body: some WidgetConfiguration {
ActivityConfiguration(
for: CharacterIslandAttributes.self,
content: { context in
CharacterIslandWidgetView(context: context)
},
dynamicIsland: { context in
DynamicIsland(
expanded: {
DynamicIslandExpandedRegion(.center) {
Text(context.state.CharacterName)
}
DynamicIslandExpandedRegion(.leading) {
SpriteView(scene: CharacterScene(characterName: context.state.CharacterImage))
.frame(width: 50, height: 50)
}
},
compactLeading: {
SpriteView(scene: CharacterScene(characterName: context.state.CharacterImage))
.frame(width: 50, height: 50)
},
compactTrailing: {
},
minimal: {
SpriteView(scene: CharacterScene(characterName: context.state.CharacterImage))
.frame(width: 50, height: 50)
})
}
)}
}
struct CharacterIslandWidgetView: View {
let context: ActivityViewContext<CharacterIslandAttributes>
var body: some View {
SpriteView(scene: CharacterScene(characterName: context.state.CharacterImage))
.frame(width: 50, height: 50)
Text(context.state.CharacterImage)
}
}
我没有在日志中得到任何可执行错误,所以我不知道确切的问题,但图像看起来像这样(我还没有为小部件设置预览)。
Map集名称在图像下方给出,并且是正确的,因为它在应用程序中运行得非常好。
一些额外的东西:
- 资产文件夹在小部件和应用程序之间共享,它之所以能工作,是因为它会显示在应用程序上。
- CharacterImage是包含所有精灵的Map集“文件夹”名称。
接下来我该怎么做?在Live Activities(Dynamic Island)中不允许使用精灵视图吗?
我尝试硬编码名称,并阅读错误日志,但没有显示。
1条答案
按热度按时间n53p2ov01#
widget只支持SwiftUI视图的一个子集,而live activity是一种特殊的widget。苹果公司的文档SwiftUI views that can be used in widgets .
当尝试使用不受支持的SwiftUI视图(Why do some views appear as a red no entry sign in widgets?)时,似乎会显示红色禁止进入符号