V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  jwautumn  ›  全部回复第 5 页 / 共 10 页
回复总数  185
1  2  3  4  5  6  7  8  9  10  
2023-03-21 10:34:54 +08:00
回复了 blacko 创建的主题 Swift 一个 SwiftUI 的超级新手小白问题
struct ContentView: View {
@State private var xv = false

var body: some View {
VStack {
Text("Hello, World!")
.scaleEffect(xv ? 1.5 : 1)
Group {
if xv {
Text("T")
} else {
Text("F")
}
}
}
.onTapGesture {
withAnimation(Animation.spring().repeatForever()){
self.xv.toggle()
}
}
}
}

在这个示例中,我们将 if 条件语句与包含 Text 视图的 Group 组合在一起,在框架布局的条件块中同时更新了两个文本。这将确保在切换 xv 值时更新整个分组,而不是只更新字符串。

现在,当你点击屏幕时,你会发现 scaleEffect 的值仍然会通过弹簧动画进行调整,但是文本颜色仅在新动画开始时更改,并在之后保持静止,直到新动画开始时再次更新。

~~~
能详细解释下具体是为什么吗?
~~~
当您单独更新一个 Text 视图的内容时,在 SwiftUI 中,只有该视图及其子视图会重新渲染。但是,在您切换 if 条件分句中的语句时,将重新构建容器视图 Group 。这是因为 SwiftUI 会在任何视图更改后检查详细信息,例如视图类型、颜色、位置等,以确定它是否需要重新构建它的子树。在本例中,每次选择不同的条件语句时,SwiftUI 都会发现“Group”视图的内容和结构发生了变化,因此它将该视图标记为需要更新,并从头开始执行构建过程。

因此,通过在 Group 中同时更新两个具有相同数据源的 Text 视图,您可以确保视图不仅仅只是可变数据源的容器,而是由数据源本身完全驱动的视图。这有利于优化性能并减少不必要的重新构建。


~~~~~

以上是我咨询 Chatgpt 后的结果(包括上面的一条回复)。
大概就是:“更新文字” 和 “更新布局” 的问题。
我按照你的代码实现后也是一样。 我也挺纳闷,查询无果后还是问了 gpt 。也是学到了。
当然还有一种处理方式是:
```
Text("\(xv ? "T" : "F")")
.animation(xv ? .spring().repeatForever() : .default, value: xv)
```
想来,应该跟上面的意思差不多。更新了整体布局,而不是单纯的变化了文字。
希望对你有帮助
2023-03-21 10:29:20 +08:00
回复了 blacko 创建的主题 Swift 一个 SwiftUI 的超级新手小白问题
在切换 xv 后,动画停止而文字逐渐变化的原因是因为:

动画在不断地重复
scaleEffect 的值随着 xv 的变化而变化,因此会立即更新文本的缩放大小
而在另一方面,Text("\(xv ? "T" : "F")") 中的字符串只在切换 xv 值时才会更新,因此在动画完成后仍将继续反复更新字符串的标签。
为了避免这种情况,您可以将两个 Text 视图放在同一个 Group 中,并在 Group 的条件语句中同时更新它们。这将确保您修改的不仅仅是标签的值,而是整个 Group 的内容。以下是更新后的代码示例,可以解决您描述的问题:
2023-03-21 09:45:07 +08:00
回复了 a379395979 创建的主题 iDev 有没有用 Swift 接过阿里百川的?调用授权奔溃
有没有可能。。。就是 op 手误打错了。 哎呀,你们干吗~(长音)
2023-03-20 11:20:30 +08:00
回复了 9787532754687 创建的主题 推广 ChatGPT 自建站 送千次对话 key
YXV0aEBqd2F1dHVtbi5jb20K 感谢
2023-03-10 16:26:57 +08:00
回复了 zcfnc 创建的主题 问与答 书法老师转行有哪些可以做的职业
B 站上好多 up 主 只写字。视频播放量都很多呀~ 可以试试
我刚开始看到了也挺纳闷,选择统一申报要补税,单独计算则不需要。
咨询了下财务,让选择单独补税,说奖金发放的时候已经交税了。
正好不用补税了。
2023-03-08 16:25:01 +08:00
回复了 A01514035 创建的主题 OpenAI 大家 chatgpt 的历史会话还在吗
@jwautumn #52 接着上面,如果你用的不是无痕模式,那么还是可以通过历史记录找回的。然后保存一下吧。。
2023-03-08 16:23:16 +08:00
回复了 A01514035 创建的主题 OpenAI 大家 chatgpt 的历史会话还在吗
看了一下,没了。
我是用的无痕模式浏览的,页面一直没有关闭。今天上午想找个回话记录,打开了两个会话,搜了一下东西。
就在刚刚,我就通过回退的方式。找回了之前的两个会话,内容记录都还在。
然后赶紧保存了一下 id 。
2023-03-07 15:35:35 +08:00
回复了 tbxark 创建的主题 OpenAI 免费快速部署自己的 ChatGPT Telegram 机器人
已搞定 感谢
2023-03-02 16:43:31 +08:00
回复了 flypei 创建的主题 推广 T 楼! T 楼! 送 YouTube Premium 会员 一年
+1
2023-02-23 10:39:21 +08:00
回复了 MZSAN 创建的主题 职场话题 我想问一个偏私人的问题,不知合不合适🤔
同济南,就问下公司还要人不,钱不钱的不重要,主要是去学习点知识
2023-02-14 09:00:53 +08:00
回复了 prodan 创建的主题 问与答 你们玩抖音吗?你见过最毁三观或者最智障的内容是什么?
不玩,偶尔听见别人外放的那种魔性的笑声,,我 TM 都头皮发麻。。。
2023-02-08 08:57:23 +08:00
回复了 wdold 创建的主题 生活 有老哥去补过牙吗
前几天刚补过。
21 年的时候在这个牙科医院洗牙的时候顺便拍了个片子看看牙,说上边两侧都有两个牙坏了,快到神经了,让尽快补。
但是没怎么在意。毕竟这里补牙不报销。觉得没啥事,懒得花那个钱。就揭过了。
前几天,在老家,大年三十晚上吃饭,左侧上方的一颗牙齿突然碎了。还好不疼,心想着:完了,真的要补牙了。
回来后又去了这个医院,重新拍了片子。说已经很严重了,可能已经伤到神经了,先清理一下看看吧。如果没伤到神经,直接补上,如果伤到了就只能针管了。
我心里慌得一批,立马做了,万幸没有伤到神经。就补了。因为两个牙是一起坏的,旁边那颗也一起补了。
两颗一共消费 1010 。医生说如果针管的话,一颗牙 2k 起步吧。而且还不是一次性的,需要分好几次处理。
另外一次的两颗牙也是很严重,打算过几天过去一起处理了。
小诊所不走医保报销。肉疼
2023-02-06 14:01:29 +08:00
回复了 kisshere 创建的主题 问与答 人一出生下来,命运全都是定了的吗?
你问问命运,接下来我会不会呼你熊脸~
2023-01-29 09:29:14 +08:00
回复了 spicy777 创建的主题 生活 哎,过年因为相亲的事和爸妈闹得不愉快,初三就跑了
忘记加🐶了
2023-01-29 09:28:49 +08:00
回复了 spicy777 创建的主题 生活 哎,过年因为相亲的事和爸妈闹得不愉快,初三就跑了
楼上那些说 “玩玩再说”的,有没有想过 OP 可能不缺玩的,或者 OP 已经“玩不起”了
2023-01-16 10:37:36 +08:00
回复了 txj 创建的主题 分享创造 发一个我的微信红包封面吧,七彩祥云兔
已领,感谢
已领,感谢 OP ❤️
2023-01-11 11:10:00 +08:00
回复了 Aruen 创建的主题 问与答 你们公司有年会、有年终奖吗?
年会结束了 抽了个徕芬吹风机。
比较简单 就是吃个饭,抽个奖。
2023-01-05 14:18:47 +08:00
回复了 timedivision 创建的主题 问与答 结了婚的老哥们进来聊聊呗
楼上总结的很好 照做就行
1  2  3  4  5  6  7  8  9  10  
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   3014 人在线   最高记录 6543   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 39ms · UTC 08:28 · PVG 16:28 · LAX 01:28 · JFK 04:28
Developed with CodeLauncher
♥ Do have faith in what you're doing.