我试图制作一个像这样的对话气泡:
Text("Hello my name is Johnny Miller and I am new here")
.foregroundColor(.white)
.padding()
.background(.blue)
.cornerRadius(25)
Run Code Online (Sandbox Code Playgroud)
然而我认为讲话泡泡看起来比实际需要的要宽得多。因此,我试图限制气泡在到达新线之前可以延伸多远。我想到的最简单的方法是:
Text("Hello my name is Johnny Miller and I am new here")
.foregroundColor(.white)
.padding()
.background(.blue)
.cornerRadius(25)
.frame(maxWidth: 300) // << Limits how wide it can stretch
Run Code Online (Sandbox Code Playgroud)
这适用于长消息,但当文本较小(例如“Hello”)时,框架将保持在 300 磅,并且拒绝将大小调整到理想宽度。
我尝试使用.fixedSize(),但这会导致文本很长时被截断。
我找不到一种方法来限制文本的宽度并仍然保持其理想的大小。如果有人能提出解决方案,我将不胜感激。
简而言之:文本框架的宽度不应超过 300pts,但可以任意高。
提前致谢!
这些是我到目前为止尝试过的事情:
Text("Hello")
.foregroundColor(.white)
.padding()
.background(.blue)
.cornerRadius(25)
.frame(maxWidth: 300)
.lineLimit(nil)
Run Code Online (Sandbox Code Playgroud)
这会导致“Hello”气泡的帧为 300(我在上面提供了图像)
我尝试过:
Text("Hello my name is Johnny Miller and I am new here")
.foregroundColor(.white)
.padding()
.background(.blue)
.cornerRadius(25) …Run Code Online (Sandbox Code Playgroud) 我正在尝试创建一个简单的struct,它接受一组视图并返回一个VStack包含这些视图的普通视图,除了它们都是对角堆叠的。
代码:
struct LeaningTower<Content: View>: View {
var views: [Content]
var body: some View {
VStack {
ForEach(0..<views.count) { index in
self.views[index]
.offset(x: CGFloat(index * 30))
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
现在这很好用,但每当我不得不调用它时,我总是很生气:
LeaningTower(views: [Text("Something 1"), Text("Something 2"), Text("Something 3")])
Run Code Online (Sandbox Code Playgroud)
在这样的数组中列出视图对我来说似乎非常奇怪,所以我想知道是否有一种方法可以像这样@ViewBuilder调用我的LeaningTower结构:
LeaningTower { // Same way how you would create a regular VStack
Text("Something 1")
Text("Something 2")
Text("Something 3")
// And then have all of these Text's in my 'views' array
}
Run Code Online (Sandbox Code Playgroud)
如果有一种方法可以@ViewBuilder …
我正在研究animatableData我制作的自定义形状的属性,但我无法真正想象它的作用以及系统在哪里使用它。
我不明白系统如何知道animatableData当状态发生变化时应该插入哪些属性。我也不明白这get部分属性animatableData是被系统用来做什么的。我唯一理解的是,当变量发生更改时,SwiftUI 会将animatableData属性更新为原始值和最终值之间的所有中间值。@State
animatableData如果有人可以给出系统使用的非常详细的事件顺序,我将非常感激。尽可能详细,因为我是那种即使不理解 1% 的东西也会感到潦草的人之一(但是如果我确实有任何问题,我会在评论中问你)。
提前致谢!
PS 我尝试在 getter 中返回一个常量,animatableData但我的动画仍然完美运行,这让我更加困惑。如果可以的话请告诉我吸气剂的用途。
我正在考虑使用 SpriteKit 为 iOS 创建一款复古风格的游戏,我想知道是否有任何方法可以在 Gameboy Advance 上运行它。
根据我的观察,Gameboys 可以运行任何用任何编程语言编写的游戏,只要它“编译为 ARM 汇编”。我检查了 Swift 是否编译为 ARM 程序集,其中提到了 Swift 编译为本机代码(即程序集)。这是否意味着可以在实际的 Gameboy 上运行复古风格的 iOS 游戏(请记住艺术品所需的分辨率以及其他此类限制)?
如果我有什么方法可以为 iOS 创建游戏,但同时也可以在 Gameboy Advance 上运行,请告诉我。
在苹果文档中,它说
\n\n\n任务创建后可以立即开始运行;您不\xe2\x80\x99t显式启动或安排它们。
\n
但是,在我的代码中,任务仅在调用它的函数超出范围时才开始运行。
\nfunc test() {\n Task {\n print("in task")\n }\n for _ in 0 ..< 10_000_000 { }\n print("done counting")\n}\nRun Code Online (Sandbox Code Playgroud)\n此代码在执行时会挂起/等待一定时间,然后始终打印:
\n done counting
\nin task
我预计它会打印
\n in task
\ndone counting
有人可以解释一下我在苹果文档中遗漏了什么吗?
\n当我尝试在场景的函数中设置该showPhysics属性时,当我在 SwiftUI 中使用 SpriteView 呈现它时,它不会执行任何操作。当我尝试显示 FPS 和节点数时,也会发生同样的情况。这是代码:truedidMove(to:)
class GameScene: SKScene {
override func didMove(to view: SKView) {
view.showsFPS = true
size = view.frame.size
addChild(SKSpriteNode(color: .yellow, size: CGSizeMake(50, 50)))
}
}
struct ContentView: View {
var body: some View {
VStack {
Text("My Game")
SpriteView(scene: GameScene())
}
.padding()
}
}
Run Code Online (Sandbox Code Playgroud)
这是一个错误还是我使用 SpriteView 错误?
我想为我的Data实例添加描述,以便我知道它们的用途。
例如:“此数据用于 (user.name) 的个人资料图片”或“此数据是编码的用户实例”等。
我正在浏览Data实例可用的属性,看到有一个descriptionanddebugDescription属性。我试图为这些属性设置值,但似乎我不能,因为它们是 get-only 属性。有没有其他方法可以向Data实例添加描述?
编辑:Data按照下面的建议
包装实例是一个很好的解决方案,但如果有一种方法可以在不使用包装器的情况下实现相同的效果,请告诉我。
ios ×7
swift ×7
swiftui ×4
sprite-kit ×2
animation ×1
arrays ×1
concurrency ×1
frame ×1
gameboy ×1
layout ×1
spriteview ×1
task ×1
viewbuilder ×1