问题标签 [swiftui-animation]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
897 浏览

swift - SwiftUI 中的 rotation3dEffect 是如何工作的?

x、y 和 z 参数如何在rotation3DEffect?

由于文档没有解释任何内容,因此我在Paul Hudson 的 Hacking With Swift中找到了这一点。

它说

如果您之前从未进行过 3D 旋转,那么您应该将 X/Y/Z 轴视为贯穿您的视图。X 轴是水平的,所以如果你在 X 轴上旋转它就像在你的视图中放置一个水平的串 - 任何旋转都会使顶部或底部更近或更远,但不会调整前缘和后缘。

好的,但现在我的疑问是,在:

如果我们无论如何都要将 x、y 和 z 的值与这些轴成 45 度角,那么它们的值有什么关系?

有这样的东西不是更合乎逻辑吗?

0 投票
1 回答
1193 浏览

swift - 如何使用 SwiftUI 为可隐藏视图设置动画?

我正在尝试 SwiftUI,虽然我发现它的许多功能非常优雅,但我在动画和过渡方面遇到了麻烦。目前,我有类似的东西

这个标签确实可以正确过渡,但是当它应该移动时(例如,当上面的另一个视图被隐藏时)它不会像我预期的那样动画,而是跳到适当的位置。我注意到将所有内容包装在一个HStack作品中,但我不明白为什么这是必要的,我希望那里有更好的解决方案。

谢谢

0 投票
3 回答
738 浏览

swiftui - 如何在 SwiftUI 中自定义角度变化的动画

我有一个应用程序,它显示了一群人,每个人都有一个起源和角度。

当它们从位置 A 移动到位置 B 时,SwiftUI 会神奇地自动执行许多动画

但是 - 对于角度(面对)属性,我希望动画以最短的路线进行(请记住,在现实世界中 - 角度环绕)。

例如,当角度变化 5 -> 10(度)时,Swift UI 会正确设置动画

但是从 2 到 358,需要很长的路要走

SwiftUI 做了 2,3,4,5,6,7.......,357,358

我希望它在哪里做

我该怎么办?

谢谢你

更新:我希望有一个解决方案可以让我使用动画系统,可能使用直接提供动画步骤的新 MyAngle 结构,可能使用某种动画修改器。.easeInOut 修改了这些步骤 - 是否有一种等效的方法可以创建 .goTheRightWay 动画?

0 投票
2 回答
1328 浏览

swiftui - 条件子视图的 SwiftUI 转换

我正在尝试理解和试验 swiftUI 视图转换,并且可以使用一些洞察力来了解为什么以下内容不能按我预期的方式工作:

有两个按钮的条件 HStack。当@State 参数showOverlay改变时,它在一个withAnimation块内完成。单个按钮上的转换不受支持。

如果我删除 HStack,并将 zIndex(1) 放在每个按钮上,则会发生删除转换,但不会发生插入转换。

我希望两个按钮在它们的组添加到视图时以指定的方式转换。

问题:为什么包装在 HStack 中会导致内部转换被忽略?为什么边缘过渡只在 1 个方向上起作用?

0 投票
1 回答
768 浏览

swiftui - SwiftUI 嵌套过渡和动画

我有一个水平ScrollView的,可以容纳一些Rectangles。我想要实现的是淡出每个Rectangle然后隐藏(删除)ScrollView.

我已经部分实现了这一点:

在此处输入图像描述

我说的部分原因是,如您所见,Rectangles 已被删除,但 ScrollView 仍然存在(请参阅属于 ScrollView 的蓝色边框框,我添加了一些填充以使其更加可见)。

我在想我可能需要嵌套转换(每个Rectangle都有一个.move(edge:)转换,应该有另一个“外部”转换ScrollView- 但这也可能是错误的方法。

任何想法如何实现此动画并ScrollView在动画结束时转换(删除)?我尝试了不同的选择,但我失败了。注意:黑色Rectangle是固定的。

这是示例代码:

0 投票
0 回答
1492 浏览

swiftui - SwiftUI 转换有不同的实现?

我一直在测试基于SwiftUI-labs的转换是如何工作的,但我发现转换不应该都以相同的方式实现。基于上一篇文章:

请注意,从 XCode 11.2 开始,过渡不再适用于隐式动画

事情是,我发现了一些奇怪的东西。使用隐式动画或将动画与其关联时,某些过渡效果很好。那么,应该使用什么动画呢?这得看情况。什么?我不知道。我希望任何人都可以帮助我解释这一切。

在下面的测试中,我创建了 5 个视图,每个视图都与不同的转换相关联:.opacity.scale.move.slidecombined(.opacity.move)。以下是我的发现:

注意:我使用的是 XCODE 11.4 和模拟器!

使用隐式动画的过渡

只有.move.slide转换工作正常(删除和插入)。

在此处输入图像描述

使用显式动画的过渡

移除和插入动画适用于所有过渡。

在此处输入图像描述

将动画与每个过渡相关联

只有.scale.opacity转换工作正常(删除和插入)。

在此处输入图像描述

从我的角度来看,没有实现转换的标准方法会使事情变得复杂,而且在组合转换时(.combined)。

我错过了一些关于实施的东西吗?这是我的代码:

0 投票
1 回答
33 浏览

swift - 打开视图时,ScrollView 中的 HStack 会出现奇怪的动画

所以我试图在列表视图中为每个嵌入的行实现扩展/收缩行,结果发现列表视图单元格的动画不流畅。在查看本教程后,它建议使用带有 foreach 的滚动视图,因为它的动画效果更流畅。扩展/收缩工作正常,但只有当我第一次打开页面时才会出现意想不到的副作用。HStack 似乎在视图的左侧开始展平,并动画展开到其正常的起始位置。我已经放慢了视频中的动画速度,以便更容易看到,并且我删除了 ForEach,因为它似乎不是问题的原因。我不知道是什么原因造成的,谷歌搜索没有得到任何答案。这里有人有答案或至少有一些建议吗?非常感激

发生了什么(动画已经放慢了)

0 投票
0 回答
519 浏览

swiftui - SwiftUI 非对称转换延迟不起作用

我正在尝试创建一个动画来展示和关闭一组对象。我有:

这是自定义AnyTransition动画的定义

我的目标是延迟插入动画以创建序列,但我不希望在视图被关闭时出现延迟。问题是尽管添加了动画修改器,但不对称动画仍在使用默认动画。是否有任何理由忽略插入时的延迟和持续时间动画?

0 投票
1 回答
221 浏览

swiftui - SwiftUI animate all except .foregroundColor

Based on the value of a @State var, how can I animate any other parameters but one? For instance, I want to animate .offset but not the .foregroundColor. It may sound like an easy task to do, but it's not so easy when using the same "base view" to create some sort of cell views and combining different modifiers and transition.

For the following animation, I'm trying to "avoid" that change-color animation while allowing the offset to happen - I need the change of color to happen instantaneously, no animation.

enter image description here

For this animation, I'm also trying to "avoid" that change-color animation. The challenge here is that the base view also has a transition.

enter image description here

The "base view" name is LogoView. Here's my code:

0 投票
1 回答
225 浏览

swiftui - 延迟动画而不是使用计时器

我在swiftui中有几个圈子,它们对触摸手势做出反应。我希望他们增加 opac 值,然后再次减少它:

方法 blink 动画 opac 值的变化:

在此动画处于活动状态时,我希望禁用圆圈并且不对触摸做出反应。我将尝试通过@Status var buttonActive 来实现

这只适用于这一点,即在进入 .onEnded 块时将此值设置为 false。现在我想在其他动画结束后用眨眼方法重置它。但是延迟修饰符不适用于第三个“动画”。事实上,该值立即设置回 true,以便圆圈继续对触摸做出反应。

是在不使用计时器的情况下达到目标的唯一方法吗?