首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Ask Apple 2022 与 SwiftUI 有关问答(下)

视图性能优化Q:面对复杂用户界面,控制视图中更新范围最佳做法是什么( 以避免不需要转发以及重复计算 )。...我采用了常见解决方案,即旋转滚动视图和里面的每个单元格,以获得预期倒置列表,在 iOS 上,这很有效。但在 macOS 上,它使 CPU 使用率保持在 100%。...阅读 SwiftUI 动画机制[16] 一文,了解更多有关动画内容。...贴一个临时解决方案。image-20221023171100484滚动速度Q:有好方式在 List 和 ScrollView 滑动监听滑动 velocity 值么?...在 SwiftUI 中,有一个从第一版开始就存在但尚未公开SwiftUI 实现滚动容器 —— _ScrollView 。

14.7K30
您找到你想要的搜索结果了吗?
是的
没有找到

WWDC 23 ,SwiftUI 5 和 SwiftData 初印象

革命性动画和视觉效果升级 SwiftUI 原本欠缺一些高级动画和视觉功能在本次升级中一并被补上了,而且苹果大幅更新了动画、转场、Shape、效果等方面的内部实现。...总之,当前制约动画或视觉效果将不再是 SwiftUI 能力,而是开发者创意。...,直接定位到滚动视图特定位置,只能使用一次 )、全新滚动条控制( 闪烁 )、可自定义行视图在滚动区域顶端和显示区域显示状态( 例如可用其实现类似 watchOS 中滚动到顶端子视图缩小视觉效果...)、支持分页滚动( 开发者长期盼望 )、自定义滚动内容缩进、为滚动内容(非滚动容器)添加安全区域等众多功能。...欢迎你通过 Twitter[5]、 Discord 频道[6] 或博客留言板与我进行交流。 订阅下方 邮件列表[7],可以及时获得每周最新文章。

34410

css+js实现左右滑动卡片组件

最近一个活动页面需要做一个可以左右滑动抽签效果,故通过用csstransform属性和js结合来模拟可以无限滚动效果。...无限滚动原理 由于这里停止位置是固定,前排永远是当前卡片相对于口居中,后排永远是两个卡片相对于口居中,且每个卡片是一样,所以当卡片列表向前或向右移动到一个目标位置,都将列表重置为初始位置继续滚动...如下图以前排卡片为例: 1544756683_12_w2480_h1496.png 所以当滚动停止后会统一将列表样式设置为transform: translateX(0)。...连续滑动判断 当在上次滑动动画还未播放结束用户又进行了第二次滑动,需要执行一下操作:     1)....取消第二次滑动动画播放和位移重置 // 若是上次动画未结束不需要再次启动动画和重置目标位移 if( this.ani_move && this.fingerTouch == false) { } else

29.9K102

深入了解 SwiftUI 5 中 ScrollView 新功能

当 scrollClipDisable 为 false 滚动内容会被裁剪以适应滚动容器边界。任何超出边界部分将不会显示。...当 scrollClipDisable 为 true 滚动内容不会被裁剪。它可以延伸超出滚动容器边界,从而显示更多内容。...(视图标识) 不支持锚点设定,固定锚点为子视图 center 正如 优化在 SwiftUI List 中显示大数据集响应效率[6] 一文所提到,当数据集很大,也会出现性能问题。...滚动停止,容器顶端将与子视图顶部对齐(在垂直模式下)。开发者可以通过控制 scrollTargetLayout 启用与否来开关 viewAligned 行为。...当子视图滑入和滑出包含它滚动视图可视区域,scrollTransition 会对该视图应用给定过渡动画,并在不同阶段之间平滑地过渡。

62020

解析 SwiftUI 中两处由状态更新滞后引发严重 Bug

这些控件基本上都是对 UIkit(AppKit)二次包装。Sheet执行下面的代码,你可以清楚地看到,在通过手势取消 Sheet ,与其关联状态是在 Sheet 完成取消动画后才发生了改变。...当视图正在滚动返回上一层视图会导致应用崩溃这是一个由 xiaogd 在我 Discord 论坛中提出 问题。...请至少进入第三级视图滚动当前视图当视图处于滚动状态,点击 NavigationStack 左上角 “Back” 按钮。...由于在返回上层视图,状态尚未更新,因此在清理 AG (返回动画运行中),会破坏应用程序 AttributeGraph 完整性,从而导致应用程序死锁或崩溃。...希望 SwiftUI 开发组能尽早重视这些问题。欢迎你通过 Twitter、 Discord 频道 或博客留言板与我进行交流。订阅下方 邮件列表,可以及时获得每周最新文章。

570110

如何判断 ScrollView、List 是否正在滚动

比如在 SwipeCell[3] 中,需要在可滚动组件开始滚动,自动关闭已经打开侧滑菜单。遗憾是,SwiftUI 并没有提供这方面的 API 。...本文将介绍几种在 SwiftUI 中获取当前滚动状态方法,每种方法都有各自优势和局限性。...iOS 系统在 macOS 下 eventTracking 模式中,该方案表现并不理想屏幕中只能有一个可滚动控件由于任意可滚动控件滚动,都会导致主线程 Runloop 切换至 tracing...( 状态已变化为滚动中 ),保持手指处于按压状态并停止滑动,此方式会将此时视为滚动结束,而前两种方式仍会保持滚动状态直到手指结束按压IsScrolling我将后两种解决方案打包做成了一个库 —— IsScrolling...每周也会对当周博客上新文章以及在 Twitter 上发布 Tips 进行汇总,并通过邮件列表形式发送给订阅者。订阅下方 邮件列表[9],可以及时获得每周 Tips 汇总。

3.7K40

WWDC 23 ,SwiftUI 5 和 SwiftData 初印象

革命性动画和视觉效果升级 SwiftUI 原本欠缺一些高级动画和视觉功能在本次升级中一并被补上了,而且苹果大幅更新了动画、转场、Shape、效果等方面的内部实现。...总之,当前制约动画或视觉效果将不再是 SwiftUI 能力,而是开发者创意。...,直接定位到滚动视图特定位置,只能使用一次 )、全新滚动条控制( 闪烁 )、可自定义行视图在滚动区域顶端和显示区域显示状态( 例如可用其实现类似 watchOS 中滚动到顶端子视图缩小视觉效果...)、支持分页滚动( 开发者长期盼望 )、自定义滚动内容缩进、为滚动内容(非滚动容器)添加安全区域等众多功能。...一开始看到这些信息,我内心无比兴奋,但很快就平静下来了,最终还有些无奈。 对于绝大多数开发者来说,一旦能够在应用中使用这些新功能,苹果或许又会带来更多新诱惑。

1.1K20

Ask Apple 2022 与 SwiftUI 有关问答(上)

是否有任何建议用来检测列表行选择,类似于 “NavigationLink”,但不导航到另一个视图(例如,显示 Sheet 或从列表中选择一个选项 )?...在单元测试中,很难对 SwiftUI图中依赖( 符合 DynamicProperty 协议 )进行测试。这也是 Redux-like 框架优势之一( 将状态从视图中抽离出来,方便测试 )。...假设我们想创建一个类似于 iMessage 视图,在那里你可以看到一个信息列表(与本例无关),在视图底部有一个文本框。当用户点击文本字段,键盘会在其工具栏中出现一个文本字段。...阅读 SwiftUI 动画机制[8] 一文,了解更多有关动画内容。自适应高度 SheetQ:如何在 iOS16 中呈现与动态内容高度相匹配 Sheet?...每周也会对当周博客上新文章以及在 Twitter 上发布 Tips 进行汇总,并通过邮件列表形式发送给订阅者。订阅下方 邮件列表[25],可以及时获得每周 Tips 汇总。

12.2K20

SwiftUI 方式进行布局

在上面的代码中,由于两个视图使用了同样动画曲线设定,因此,在移动并不会出现分离情况。...四、ScrollView 考虑到本文需求动画形态( 竖向滚动 ),使用 ScrollViewReader 提供滚动定位功能,同样可以满足需求。...ScrollView 会使用父视图给定全部建议尺寸创建滚动区域,但在询问其子视图需求尺寸只会提供理想尺寸。...七、Transition 通过为视图设定 Transition( 转场 ),在视图插入或将其移出视图树SwiftUI 将自动生成对应动画效果。...有关转场动画更多内容,请参阅 SwiftUI 动画机制[8] 一文 八、Layout 协议 在 4.0 版本中,SwiftUI 增加了 Layout 协议,通过该协议,开发者可以针对特定场景,创建自定义布局容器

3.2K00

解析 SwiftUI 中两处由状态更新滞后引发严重 Bug

Sheet 执行下面的代码,你可以清楚地看到,在通过手势取消 Sheet ,与其关联状态是在 Sheet 完成取消动画后才发生了改变。...(动画结束),立即在屏幕上由左至右滑动,返回上一层视图 在滑动返回到上一层视图后,应用会锁死。...当视图正在滚动返回上一层视图会导致应用崩溃 这是一个由 xiaogd 在我 Discord 论坛中提出 问题[3]。...请至少进入第三级视图 滚动当前视图 当视图处于滚动状态,点击 NavigationStack 左上角 “Back” 按钮。...由于在返回上层视图,状态尚未更新,因此在清理 AG (返回动画运行中),会破坏应用程序 AttributeGraph 完整性,从而导致应用程序死锁或崩溃。

25620

SwiftUI 方式进行布局

在上面的代码中,由于两个视图使用了同样动画曲线设定,因此,在移动并不会出现分离情况。...四、ScrollView 考虑到本文需求动画形态( 竖向滚动 ),使用 ScrollViewReader 提供滚动定位功能,同样可以满足需求。...ScrollView 会使用父视图给定全部建议尺寸创建滚动区域,但在询问其子视图需求尺寸只会提供理想尺寸。...七、Transition 通过为视图设定 Transition( 转场 ),在视图插入或将其移出视图树SwiftUI 将自动生成对应动画效果。...有关转场动画更多内容,请参阅 SwiftUI 动画机制 一文 八、Layout 协议 在 4.0 版本中,SwiftUI 增加了 Layout 协议,通过该协议,开发者可以针对特定场景,创建自定义布局容器

4.7K80

在 Text 中实现基于关键字搜索和定位

,会自动将其设置为当前高亮关键字并滚动至视图中心位置scrollTo_keyword2_2022-08-22_09.06.20.2022-08-22 09_07_57在对话数据较多情况下(上千条)不应有性能瓶颈解决思路一千个人眼中有一千个哈姆雷特...请阅读 优化在 SwiftUI List 中显示大数据集响应效率[6] 以及 避免 SwiftUI 视图重复计算[7] 两篇文章,了解更多有关性能优化方面的内容通过 currentPostion 获取需要滚动...onAppear,每个视图退出显示窗口都会调用它 onDisapper。...每周也会对当周博客上新文章以及在 Twitter 上发布 Tips 进行汇总,并通过邮件列表形式发送给订阅者。订阅 邮件列表[14],可以及时获得每周 Tips 汇总。.../posts/swiftUILifeCycle/[10] 在 SwiftUI图中打开 URL 若干方法: https://www.fatbobman.com/posts/open_url_in_swiftUI

4.2K30

解析SwiftUI布局细节(二)循环轮播+复杂布局

HomeBannerView() .environmentObject(homeViewModel) /// 服务列表...通过它我们可以避免在初始 View 创建 ObservableObject, 而是从环境中获取 ObservableObject,像 @EnvironmentObject,@ObservedObject...3、再提一点关于上面说滚动视图,在UIKit中我们可以用UICollectionView搞定一切,但是在SwiftUI中没有这个控件,我建议采用方式是 ScrollView + HStack + VStack...循环轮播实现 ---- 总结一下循环轮播怎么实现,采用方案就是 HStack + Gesture + Timer 方式,这三者就能实现一个自动循环滚动或者手动滚动轮播。...区别于我们UIKit创建方式,SwiftUI对它进行了简化,具体创建如下: /// SwiftUI对定时器简化,可以进去看看具体参数定义 private let timer = Timer.publish

11.7K20

掌握 Transaction,实现 SwiftUI 动画精准控制

当传递进来 transaction 为 nil SwiftUI 会优化调用 .transaction 修饰器闭包时机。...当 isActive 为 true ,通过动画更改颜色;当 scale 为 true ,不使用动画进行缩放。...什么是显式动画 在视图中,通过 animation 或 transaction 修饰器声明 transaction 被称为“隐式动画”。...使用显式动画屏蔽系统组件动画 在 iOS 17 中,SwiftUI 会让大多数系统组件(如 Sheet、FullScreeCover、NavigationStack、Inspector 等)在实现动画...出现动画异常,应首先明确异常部位在状态变化时所获取到 transaction。 对可动画部件要有明确理解,除了支持动画修饰器外,布局容器也是。

42620

使用相交观察器和SQIP进行渐进式图像加载

延迟加载图像背后想法是,你需要等到用户进一步向下滚动页面,并在发出网络请求之前将图像放入视图中。...如果你网页包含多个图像,但你只能在滚动查看图像加载每个图像,则最终会节省带宽,并确保网页加载速度更快 这让我思考;我想知道是否可以将交叉观察者和使用TobiasSQIP工具创建低质量占位符图像结合起来...,然后再确定它是否在视图中。...使用IntersectionObserver默认选项,当元素部分进入视图并完全离开,你回调将被调用。在这种情况下,我正在通过一些额外配置选项到IntersectionObserver。...加载图像后,我们不需要再观察它,并且使用unobserve()将从交叉观察者条目列表中将其删除。而已!

1.8K20

初学前端用代码实现一个网页老虎机游戏

没错,少了滚动动画。我们只需要在游戏开始列表加上过渡效果即可。可能有人会问为什么要在游戏开始再加而不是一开始写样式先写上transtion过渡。...到这里我们已经实现了数字列表滚动效果,但是我们只是做了个简单从1~6滚动,并没有做到从头开始效果。简单来说就是滚动得没有像效果图中那么“持久”。...不过在下面代码我们可以看到移除抖动效果是在2.6s之后才执行,原因是第三个数字列表需要等到游戏开始1s才开始滚动,而且滚动过渡时间为2s,那等到第三个数字列表滚动到结束总共需要3s,这里小编想要在第三个数字列表滚动结束之前将老虎机停止抖动...; // 停止抖动 stopShake(); // 重置因为列表会重新移动到初始位置,所以要清除掉过渡效果 removeTranstion(); // 各个列表回到最初位置...= false; // 三个setTimeout返回表示符,前两个是第二列第三列列表开始滚动延时方法,timeout3是机器停止摇晃动画延时方法 let timeout1 = null

5.1K10

用最少代码却实现了最牛逼滚动动画

通过ScrollTrigger使用最少代码创建令人叹为观止滚动动画。...我们需要知道ScrollTrigger是基于GSAP实现插件,ScrollTrigger是处理滚动事件,而真正处理动画是GSAP,二者组合使用才能实现滚动动画~插件特点将任何动画链接到特定元素,以便它仅在视图中显示该元素才执行该动画...可以在进入/离开定义区域或将其直接链接到滚动动画上执行操作(播放、暂停、恢复、重新启动、反转、完成、重置)。延迟动画滚动条之间同步。根据速度捕捉动画进度值。...自定义滚动触发器容器,可以定义一个 div 而不一定是浏览器口。高度优化以实现最大性能。插件大约只有6.5kb大小。...scrollTrigger: { trigger: ".container", pin: true, // 在执行时固定触发器元素 start: "top top", // 当触发器顶部碰到顶部

2.8K00
领券