精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

如何使用 SwiftUI 中 ScrollView 的滾動(dòng)偏移

移動(dòng)開發(fā) iOS
在本文中,我們深入探討了 SwiftUI 框架中 ScrollView 的新特性,特別是如何通過 ScrollPosition 類型實(shí)現(xiàn)更精確的滾動(dòng)控制。我們介紹了如何使用 ScrollPosition 類型進(jìn)行滾動(dòng)位置的設(shè)置和讀取,包括使用偏移量、視圖標(biāo)識(shí)符等方式進(jìn)行操作。

前言

WWDC 24 已經(jīng)結(jié)束,我決定開始寫一些關(guān)于 SwiftUI 框架即將推出的新特性的文章。今年,蘋果繼續(xù)填補(bǔ)空白,引入了對(duì)滾動(dòng)位置更細(xì)粒度的控制。本周,我們將學(xué)習(xí)如何操作和讀取滾動(dòng)偏移。

使用 scrollPosition

SwiftUI 框架已經(jīng)允許我們通過視圖標(biāo)識(shí)符跟蹤和設(shè)置滾動(dòng)視圖的位置。這種方法效果不錯(cuò),但不足以更準(zhǔn)確地跟蹤用戶交互。

struct ContentView: View {
    @State private var position: Int?
    
    var body: some View {
        ScrollView {
            LazyVStack {
                ForEach(0..<100) { index in
                    Text(verbatim: index.formatted())
                        .id(index)
                }
            }
            .scrollTargetLayout()
        }
        .scrollPosition(id: $position)
    }
}

在上面的代碼示例中,我們使用了視圖標(biāo)識(shí)符和 scrollPosition 修飾符來跟蹤和設(shè)置滾動(dòng)視圖的位置。雖然這種方法效果不錯(cuò),但在某些情況下,尤其是需要更精確的用戶交互跟蹤時(shí),它可能不夠用。為了彌補(bǔ)這一不足,SwiftUI 引入了新的 ScrollPosition 類型,使我們能夠通過偏移量、滾動(dòng)視圖的邊緣、視圖標(biāo)識(shí)符等組合滾動(dòng)位置。

新的 ScrollPosition 類型

SwiftUI 框架引入了新的 ScrollPosition 類型,使我們能夠通過偏移量、滾動(dòng)視圖的邊緣、視圖標(biāo)識(shí)符等組合滾動(dòng)位置。

struct ContentView: View {
    @State private var position = ScrollPosition(edge: .top)
    
    var body: some View {
        ScrollView {
            Button("Scroll to bottom") {
                position.scrollTo(edge: .bottom)
            }
            
            ForEach(1..<100) { index in
                Text(verbatim: index.formatted())
                    .id(index)
            }
            
            Button("Scroll to top") {
                position.scrollTo(edge: .top)
            }
        }
        .scrollPosition($position)
    }
}

如上例所示,我們定義了 position 狀態(tài)屬性,并使用 scrollPosition 視圖修飾符將滾動(dòng)視圖與狀態(tài)屬性綁定。我們還放置了兩個(gè)按鈕,允許你快速滾動(dòng)到滾動(dòng)視圖中的第一個(gè)或最后一個(gè)項(xiàng)目。ScrollPosition 類型提供了許多重載的 scrollTo 函數(shù),使我們能夠處理不同的情況。

為滾動(dòng)添加動(dòng)畫

通過附加動(dòng)畫視圖修飾符并傳遞 ScrollPosition 類型的實(shí)例作為 value 參數(shù),我們可以輕松地為編程滾動(dòng)添加動(dòng)畫。

struct ContentView: View {
    @State private var position = ScrollPosition(edge: .top)
    
    var body: some View {
        ScrollView {
            Button("Scroll to bottom") {
                position.scrollTo(edge: .bottom)
            }
            
            ForEach(1..<100) { index in
                Text(verbatim: index.formatted())
                    .id(index)
            }
            
            Button("Scroll to top") {
                position.scrollTo(edge: .top)
            }
        }
        .scrollPosition($position)
        .animation(.default, value: position)
    }
}

滾動(dòng)到特定項(xiàng)目

我們添加了另一個(gè)按鈕來將滾動(dòng)視圖的位置更改為隨機(jī)項(xiàng)目。我們?nèi)匀皇褂?ScrollPosition 類型的 scrollTo 函數(shù),但我們提供了一個(gè)可哈希的標(biāo)識(shí)符。這個(gè)選項(xiàng)允許我們將位置更改為特定項(xiàng)目,通過使用 anchor 參數(shù),我們可以選擇所選視圖的哪個(gè)點(diǎn)應(yīng)該可見。

struct ContentView: View {
    @State private var position = ScrollPosition(edge: .top)
    
    var body: some View {
        ScrollView {
            Button("Scroll somewhere") {
                let id = (1..<100).randomElement() ?? 0
                position.scrollTo(id: id, anchor: .center)
            }
            
            ForEach(1..<100) { index in
                Text(verbatim: index.formatted())
                    .id(index)
            }
        }
        .scrollPosition($position)
        .animation(.default, value: position)
    }
}

滾動(dòng)到特定偏移

最后但同樣重要的是 scrollTo 函數(shù)的 point 參數(shù)重載,允許我們傳遞 CGPoint 實(shí)例以將視圖滾動(dòng)到內(nèi)容的特定點(diǎn)。

struct ContentView: View {
    @State private var position = ScrollPosition(edge: .top)
    
    var body: some View {
        ScrollView {
            Button("Scroll to offset") {
                position.scrollTo(point: CGPoint(x: 0, y: 100))
            }
            
            ForEach(1..<100) { index in
                Text(verbatim: index.formatted())
                    .id(index)
            }
        }
        .scrollPosition($position)
        .animation(.default, value: position)
    }
}

如上例所示,我們使用帶有 CGPoint 參數(shù)的 scrollTo 函數(shù)。它還提供重載,允許我們僅按 X 或 Y 軸滾動(dòng)視圖。

struct ContentView: View {
    @State private var position = ScrollPosition(edge: .top)
    
    var body: some View {
        ScrollView {            
            Button("Scroll to offset") {
                position.scrollTo(y: 100)
                position.scrollTo(x: 200)
            }
            
            ForEach(1..<100) { index in
                Text(verbatim: index.formatted())
                    .id(index)
            }
        }
        .scrollPosition($position)
        .animation(.default, value: position)
    }
}

讀取滾動(dòng)位置

我們學(xué)習(xí)了如何使用新的 ScrollPosition 類型操作滾動(dòng)位置,這也允許我們讀取滾動(dòng)視圖的位置。ScrollPosition 提供了可選的 edge、point 和 viewID 屬性,以在你編程滾動(dòng)時(shí)讀取值。

每當(dāng)用戶與滾動(dòng)視圖交互時(shí),這些屬性將變?yōu)?nil。ScrollPosition 類型上的 isPositionedByUser 屬性允許我們了解何時(shí)用戶手勢(shì)移動(dòng)滾動(dòng)視圖內(nèi)容。

提供一個(gè)可以運(yùn)行示例:

下面是一個(gè)可以運(yùn)行的示例代碼,演示如何讀取和顯示滾動(dòng)視圖的位置。我們將使用一個(gè) Text 視圖來顯示當(dāng)前滾動(dòng)位置:

import SwiftUI

struct ContentView: View {
    @State private var position = ScrollPosition(edge: .top)
    @State private var scrollOffset: CGPoint?

    var body: some View {
        VStack {
            ScrollView {
                LazyVStack {
                    ForEach(0..<100) { index in
                        Text("Item \(index)")
                            .id(index)
                            .padding()
                            .background(Color.yellow)
                            .cornerRadius(10)
                            .padding(.horizontal)
                    }
                }
                .scrollPosition($position)
                .onScrollGeometryChange { geometry in
                    scrollOffset = geometry?.contentBounds.origin
                }
            }
            .animation(.default, value: position)
            
            if let offset = scrollOffset {
                Text("Scroll Offset: x = \(Int(offset.x)), y = \(Int(offset.y))")
                    .padding()
            } else {
                Text("Scroll Offset: not available")
                    .padding()
            }
        }
        .padding()
    }
}

在這個(gè)示例中,我們使用了 onScrollGeometryChange 修飾符來讀取滾動(dòng)視圖的幾何變化。每當(dāng)滾動(dòng)視圖滾動(dòng)時(shí),geometry?.contentBounds.origin 將提供當(dāng)前滾動(dòng)位置的偏移量。我們將這個(gè)偏移量存儲(chǔ)在 scrollOffset 狀態(tài)屬性中,并在視圖底部顯示當(dāng)前的滾動(dòng)位置。

總結(jié)

在本文中,我們深入探討了 SwiftUI 框架中 ScrollView 的新特性,特別是如何通過 ScrollPosition 類型實(shí)現(xiàn)更精確的滾動(dòng)控制。我們介紹了如何使用 ScrollPosition 類型進(jìn)行滾動(dòng)位置的設(shè)置和讀取,包括使用偏移量、視圖標(biāo)識(shí)符等方式進(jìn)行操作。此外,我們還展示了如何通過動(dòng)畫和事件處理來增強(qiáng)用戶體驗(yàn)。通過這些新功能,開發(fā)者可以更靈活地控制滾動(dòng)視圖的行為,從而創(chuàng)建更加流暢和直觀的用戶界面。希望這些內(nèi)容對(duì)你有所幫助。

責(zé)任編輯:武曉燕 來源: Swift社區(qū)
相關(guān)推薦

2024-05-17 09:00:45

SwiftUIvisionOS

2022-08-24 09:02:27

SwiftUIiOS

2022-06-02 10:02:47

Kubectl更新應(yīng)用Linux

2022-11-11 09:01:08

SwiftUI條形圖子視圖

2021-12-22 15:13:03

iOS 15Swift二進(jìn)制

2024-08-09 09:02:56

2022-06-06 09:01:16

SwiftUI自定義導(dǎo)航

2023-08-21 14:02:59

iOS 17SwiftUI

2017-05-03 16:30:38

AndroidScrollView滾動(dòng)視圖

2024-03-21 07:08:53

AIntervalCronPython

2021-07-29 18:48:32

Swift iOS macOS

2021-08-16 12:13:02

SwiftUIList ArticleList

2017-01-04 10:18:00

React NativScrollViewAndroid

2021-07-13 12:20:40

Core DataSwiftUIiOS

2023-12-29 09:01:10

SwiftUI空狀態(tài)Product?

2023-11-20 09:55:34

音頻圖表SwiftUI

2022-11-14 16:38:15

前端Web開發(fā)

2023-12-29 09:01:27

SwiftUI視圖修飾符

2013-04-25 14:26:54

GridView

2020-02-21 08:00:00

Pythonasyncio編程語言
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

欧美美女喷水视频| 91丨九色丨尤物| 超碰91人人草人人干| 亚洲妇女无套内射精| 老色鬼在线视频| 国产精品青草久久| 国产精品一 二 三| 中文天堂在线资源| 国产精品99一区二区| 亚洲欧洲在线看| 性折磨bdsm欧美激情另类| 成人性生交大片免费网站| 亚洲精品中文在线观看| 欧美日韩综合精品| www.午夜激情| 日本大胆欧美人术艺术动态 | 亚洲AV无码国产精品| 日韩黄色在线| 日韩欧美国产中文字幕| 大地资源网在线观看免费官网| 日本不卡视频一区二区| 国产一区二区电影| 国产精品精品国产| 97人人澡人人爽人人模亚洲| 五月久久久综合一区二区小说| 日韩国产欧美精品在线| 女人扒开腿免费视频app| 日本欧美不卡| 欧美日韩亚洲系列| 国产黄色激情视频| 精品国产丝袜高跟鞋| 久久精品亚洲乱码伦伦中文| 国产精品久久久一区二区三区| 中文无码av一区二区三区| 99精品免费| 精品少妇v888av| 顶级黑人搡bbw搡bbbb搡| 国产成人ay| 亚洲精品不卡在线| 麻豆精品国产传媒av| 国产在线一区不卡| 欧美高清hd18日本| 一本久道中文无码字幕av| 韩国精品一区| 五月综合激情日本mⅴ| 九九久久九九久久| 国产理论在线观看| 亚洲男人的天堂av| 制服诱惑一区| 伦xxxx在线| 国产精品电影院| 亚洲精品中文字幕在线| 2019中文字幕在线视频| 国产精品无遮挡| 日韩免费毛片| 91高清在线| 国产精品乱人伦中文| 亚洲一一在线| 成人免费观看视频大全| 亚洲免费大片在线观看| 小泽玛利亚av在线| sm捆绑调教国产免费网站在线观看 | 一级成人国产| 欧美在线视频一区二区| yjizz国产| 日本一不卡视频| 国产区精品在线观看| 91国产免费视频| 国产一区二区在线影院| av一区和二区| 色综合视频在线| 久久在线观看免费| 日韩欧美精品一区二区三区经典| 91激情在线| 一区二区三区加勒比av| 日韩a∨精品日韩在线观看| 人在线成免费视频| 欧美日韩精品一区二区三区蜜桃| 中文字幕66页| 中文字幕久久精品一区二区| 日韩精品免费视频| 99在线视频免费| 中文字幕一区二区三区乱码图片 | 国产精品亚洲一区二区三区妖精 | 亚洲精品乱码久久久久久蜜桃欧美| av动漫精品一区二区| 日韩精品免费电影| 久久久久久久麻豆| 在线观看视频免费一区二区三区| 2025国产精品视频| 一级黄色片免费| 99精品视频一区二区| 日韩国产一区久久| 日本欧美电影在线观看| 色婷婷亚洲综合| 天天综合成人网| 亚洲v天堂v手机在线| 精品国产欧美一区二区五十路 | 国产日产一区二区三区| 福利视频一区二区| av在线网址导航| 人人香蕉久久| 久久av在线看| 国产suv精品一区二区33| 国产精品一区二区在线播放| 开心色怡人综合网站| a视频在线免费看| 欧美午夜宅男影院在线观看| 手机在线播放av| 欧美久久综合网| 高清亚洲成在人网站天堂| 91成年人视频| 国产精品无遮挡| 午夜精品久久久久久久无码| 国产不卡精品在线| 在线观看欧美成人| 亚洲GV成人无码久久精品| 国产在线精品一区在线观看麻豆| 你懂的视频在线一区二区| 四虎影院观看视频在线观看| 欧美日韩在线免费视频| 国产在线观看无码免费视频| 欧美三级视频| 亚洲va欧美va国产综合剧情| 国产三级在线免费| 欧美色视频日本版| 9.1在线观看免费| 51精产品一区一区三区| 国产精品欧美日韩久久| 噜噜噜在线观看播放视频| 偷拍亚洲欧洲综合| 在线观看免费视频黄| 小处雏高清一区二区三区| 国产精品久久久久高潮| 免费在线看v| 狠狠躁夜夜躁人人爽超碰91| 少妇被狂c下部羞羞漫画| 激情av一区| 999国产在线| www.在线视频| 欧美一级一区二区| 婷婷社区五月天| 国产又粗又猛又爽又黄91精品| 手机在线观看国产精品| 国产精品扒开腿做爽爽爽视频软件| 亚洲国产精品成人精品| 国产午夜精品一区二区理论影院| 国产一二精品视频| 国产精品久久久影院| 国产精品一区二区三区av| 久久综合伊人77777蜜臀| 国产精品一区二区免费视频| 自拍视频在线观看一区二区| 久久久久久久久久一区二区| 天天做天天爱综合| 亚洲字幕在线观看| 午夜小视频福利在线观看| 日韩欧美色综合| 国产在线视频卡一卡二| 99久久久精品| 虎白女粉嫩尤物福利视频| 欧美精品一区二区三区中文字幕 | 国产精品巨作av| 亚洲 日韩 国产第一| 天天综合网在线| 欧美视频在线观看 亚洲欧| 人人人妻人人澡人人爽欧美一区| 久久午夜精品一区二区| 亚洲精品中文字幕乱码三区不卡 | 国产农村妇女精品一二区| 久久综合一区二区三区| yiren22亚洲综合| 久久黄色av网站| 亚洲爱爱综合网| 激情久久av一区av二区av三区| 这里只有久久精品| 精品在线一区二区| 加勒比成人在线| 欧美先锋资源| 5566中文字幕一区二区| а_天堂中文在线| 国产一区二区三区18| 国产女人高潮毛片| 亚洲777理论| 91成人精品一区二区| 国产精品一区二区在线观看网站| 男人揉女人奶房视频60分 | 在线免费观看视频网站| 亚洲一区二区三区四区在线观看| 成人h动漫精品一区| 久久精品72免费观看| 99久久免费观看| 精品久久美女| 国产精品对白刺激久久久| 日本少妇一区| 欧美激情中文网| 日p在线观看| 日韩经典第一页| 国产喷水吹潮视频www| 懂色av中文一区二区三区天美| 阿v天堂2014| 成人国产在线观看| 狠狠操狠狠干视频| 久久精品人人做人人爽电影蜜月| 在线观看成人免费| 第一sis亚洲原创| 久久久精彩视频| 欧美成人精品一级| 国产精品九九久久久久久久| 波多野结衣在线播放| 日韩在线播放一区| 久久久久久青草| 欧美精品一区二区三区一线天视频| 免费看av在线| 欧美日韩中文字幕在线视频| 久久一级黄色片| 国产精品不卡在线| 国产sm调教视频| 99国产精品99久久久久久| 搡的我好爽在线观看免费视频| 狂野欧美一区| 日韩精品一区二区三区久久| 国产在线日韩| 三级在线免费观看| 99re66热这里只有精品8| 日本一区二区三不卡| 美女福利一区| 国产精品二区在线| 精品一区二区三区免费看| 国产一区二区香蕉| 高清亚洲高清| 国产91亚洲精品| 午夜不卡影院| 欧美一级淫片播放口| 8x8ⅹ拨牐拨牐拨牐在线观看| 久久国产精品久久国产精品| 欧美激情午夜| 日韩中文字幕不卡视频| 国产天堂素人系列在线视频| 亚洲午夜精品视频| 国产在线超碰| 伊人久久免费视频| av网站在线播放| 爽爽爽爽爽爽爽成人免费观看| 黄视频在线观看免费| 亚洲天堂av在线播放| 可以免费看污视频的网站在线| 亚洲片国产一区一级在线观看| 日本一卡二卡四卡精品| 亚洲精品一区久久久久久| 色视频在线观看免费| 亚洲毛片在线免费观看| 欧美一区二区三区少妇| 亚洲欧美日韩高清| www.亚洲视频| 日韩少妇与小伙激情| 麻豆91在线| 欧美激情精品久久久久久免费印度| 欧美日韩色网| 91国产美女视频| 欧美成人黑人| 国产精品久久9| 伊人亚洲精品| 国产精品香蕉视屏| 天堂99x99es久久精品免费| 日韩久久不卡| 91精品婷婷色在线观看| 一卡二卡三卡视频| 久久五月激情| www.色就是色.com| 国产成人在线色| 亚洲av成人精品一区二区三区| 久久午夜色播影院免费高清| 五月天免费网站| 一区二区三区av电影| 国产情侣在线视频| 欧美三级韩国三级日本一级| 国产a级免费视频| 日韩av在线影院| 在线日本中文字幕| 欧美丰满老妇厨房牲生活 | 超碰在线观看免费| 国内精品视频一区| 亚洲天堂一区二区| 3d蒂法精品啪啪一区二区免费| 欧美男男freegayvideosroom| 色噜噜一区二区| 精品动漫3d一区二区三区免费| 久久久久国产精品熟女影院| 激情综合色综合久久综合| 中文字幕在线播放一区| 国产精品久久久久久一区二区三区| 国产黄在线免费观看| 欧美午夜久久久| 国产乱色精品成人免费视频| 日韩高清欧美高清| 超碰在线免费公开| 国产精品老牛影院在线观看| 一区中文字幕| 亚欧洲精品在线视频免费观看| 欧美日本一区二区高清播放视频| 国产精品亚洲二区在线观看| 国产精品18久久久久久vr| 久久精品国产亚洲av麻豆| 亚洲欧美视频在线观看| 亚洲色成人www永久网站| 日韩欧美不卡在线观看视频| 国产系列在线观看| 久久久视频在线| www999久久| 无遮挡亚洲一区| 国产模特精品视频久久久久| 欧美午夜精品一区二区| 国产精品久久影院| 最近免费中文字幕大全免费版视频| 欧美成人bangbros| 最新国产在线观看| 国产ts一区二区| 韩国精品福利一区二区三区 | 无码人中文字幕| 欧美三级欧美成人高清www| 好男人在线视频www| 另类少妇人与禽zozz0性伦| 黄色成人在线观看网站| 奇米影视首页 狠狠色丁香婷婷久久综合| 欧美日韩三级| 在线观看一区二区三区视频| 一区在线中文字幕| 在线观看免费视频一区| 一区二区欧美亚洲| 3d欧美精品动漫xxxx无尽| 看高清中日韩色视频| 国产深夜精品| theav精尽人亡av| 亚洲国产精品一区二区www在线| av网站在线观看免费| 爱福利视频一区| av日韩一区| 影音先锋男人的网站| 狠狠狠色丁香婷婷综合久久五月| 欧美黄色高清视频| 欧美视频中文字幕| 9色在线视频网站| 国产精品夜色7777狼人| 成人一区不卡| 亚洲午夜激情影院| 亚洲欧洲在线观看av| 国产一区二区三区在线观看| www.美女亚洲精品| 国产一区2区在线观看| 99视频精品全部免费看| 成人午夜在线视频| 99热国产在线观看| 亚洲另类欧美自拍| 先锋欧美三级| 亚洲午夜激情| 国产乱码精品一区二区三| 校园春色 亚洲| 精品国产电影一区二区| 麻豆视频在线观看免费网站黄| 麻豆成人av| 美女网站视频久久| 国产免费无码一区二区视频 | 日韩黄色影院| 亚洲一区二区少妇| 亚洲大片av| 免费一级做a爰片久久毛片潮| 欧美三级中文字幕| 性xxxfreexxxx性欧美| 精品无人区一区二区三区竹菊| 久久综合网络一区二区| 一区二区三区在线播放视频| 91精品国产91久久综合桃花 | 午夜精品福利一区二区三区av| 免费看男男www网站入口在线| 国产精品一区二区三区毛片淫片 | 99久久www免费| 免费看三级黄色片| 欧美日韩一区二区精品| 午夜在线视频| 国产乱码精品一区二区三区中文| 久久资源在线| 国精品无码一区二区三区| 日韩精品中文字幕有码专区| 久久国内精品| 国产www免费| 日本一区二区动态图| www.香蕉视频| 国产精品wwww| 国产一区欧美| 香蕉久久久久久久| 亚洲电影av在线| 香蕉久久一区| 成人免费毛片网| 亚洲精品成人悠悠色影视| 久草在线青青草| 国产高清在线一区| 久久精品国内一区二区三区| 成人毛片18女人毛片| 久久亚洲一区二区三区四区五区高 |