精品欧美一区二区三区在线观看 _久久久久国色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)

久久99久久久久| 精品国精品国产自在久国产应用| 亚洲人成影院在线观看| 国产精品大全| 精品人妻一区二区三区潮喷在线 | 另类天堂av| 久久精品国产一区二区三区| 国产精品一区二区人妻喷水| 91精品国产66| 亚洲国产欧美日韩另类综合 | 久久riav二区三区| 一区二区美女视频| 一本色道久久精品| 国产丝袜美腿一区二区三区| 成人av电影天堂| 少妇一级淫片免费放中国| 99精品在线免费在线观看| 精品sm捆绑视频| 狠狠干狠狠操视频| 在线能看的av网址| 亚洲精品大片www| 色噜噜色狠狠狠狠狠综合色一| 亚洲国产999| 美女国产一区二区| 欧洲一区二区视频| 妺妺窝人体色www婷婷| 日韩欧美在线中字| 亚洲美女动态图120秒| 久久久久久久久久久影视| 天堂久久午夜av| 欧美日韩国产在线| 国产一区二区黄色| 99精品在线视频观看| 日韩av在线发布| 9.1国产丝袜在线观看| 中文字幕在线有码| 久久国产中文字幕| 中文亚洲视频在线| 香蕉视频久久久| 九九久久婷婷| 日韩的一区二区| 国产精品嫩草av| 福利片一区二区| 日韩欧美美女一区二区三区| 色婷婷激情视频| 色8久久久久| 欧美性猛交xxxx黑人交| 黄色片视频在线播放| 日韩大片免费观看| 黄网动漫久久久| 亚洲熟妇av日韩熟妇在线| 黄色污污视频在线观看| 亚洲一区二区三区四区五区黄 | 亚洲性感美女99在线| 久热爱精品视频线路一| 午夜精品一区二区三区视频| 我不卡手机影院| 精品久久久av| 国产精品成人免费观看| 女人天堂亚洲aⅴ在线观看| 久久视频在线播放| www青青草原| 国模吧视频一区| 午夜精品久久久久久久99黑人| 久草网视频在线观看| 伊人久久成人| 91成人精品网站| 日韩不卡高清视频| 免费观看在线综合色| 成人免费网站在线观看| 成 人 免费 黄 色| 99久久久国产精品| 欧美第一黄网| jlzzjlzz亚洲女人18| 国产成人精品网址| 含羞草久久爱69一区| 可以免费看污视频的网站在线| 国产人成一区二区三区影院| 91嫩草免费看| 色婷婷在线视频| 久久综合99re88久久爱| 性欧美videosex高清少妇| 欧美黄色激情| 图片区日韩欧美亚洲| 青青在线视频免费| 国产激情综合| 日韩hd视频在线观看| 三年中国中文观看免费播放| 最新精品国产| 欧美有码在线视频| 亚洲综合网av| www.欧美精品一二区| 神马影院我不卡| 欧美aaaaaaa| 在线日韩av片| 91福利视频免费观看| 一区二区三区视频免费观看| 不卡av日日日| youjizz在线视频| 极品少妇一区二区三区精品视频| 国产精品麻豆免费版| 91吃瓜网在线观看| 天天色图综合网| 91欧美一区二区三区| 国产欧美日韩影院| 欧美乱人伦中文字幕在线| 波多野结衣一本一道| 成人午夜视频网站| 影音先锋欧美在线| 依依综合在线| 欧美变态tickling挠脚心| 欧美 日韩 成人| 99综合精品| 3d动漫精品啪啪一区二区三区免费| 欧美中文在线| 午夜av一区二区三区| 日韩不卡的av| 999视频精品| 国产99久久久欧美黑人| 黑人精品一区二区| 亚洲品质自拍视频| 亚洲最大成人在线观看| 一本色道久久综合狠狠躁的番外| 欧美夫妻性视频| 一卡二卡三卡在线观看| 久久精品一区二区三区不卡牛牛| 国产精品国产亚洲精品看不卡 | 狠狠久久综合婷婷不卡| 91亚洲天堂| 在线综合亚洲欧美在线视频| 欧美人与禽zoz0善交| 久久精品人人| 久久一区二区三区欧美亚洲| 国产丝袜在线观看视频| 日韩欧美中文字幕精品| 国产精品白丝喷水在线观看| 麻豆久久久久久久| 亚洲欧美日韩综合一区| 忘忧草在线www成人影院| 亚洲美女黄色片| 欧美一二三区视频| 波多野结衣在线一区| 男人的天堂avav| 91成人精品在线| 久久久久久一区二区三区| 精品久久国产视频| 夜夜爽夜夜爽精品视频| 久久久无码人妻精品无码| 欧美三级乱码| 国内视频一区| 碰碰在线视频| 亚洲欧洲在线免费| 加勒比在线一区| 欧美国产精品一区二区三区| 国产精品无码av无码| 日韩精品不卡一区二区| 国产日本欧美在线观看| 激情成人四房播| 精品欧美一区二区三区精品久久| 精品少妇theporn| 波波电影院一区二区三区| 亚洲熟妇无码另类久久久| 日韩a级大片| 国产91精品视频在线观看| 免费福利在线观看| 91国在线观看| chinese全程对白| 国产精品一区二区在线观看网站 | www.xxxx日本| 成人综合婷婷国产精品久久蜜臀 | 国产激情一区二区三区桃花岛亚洲 | 成人午夜精品福利免费| 午夜久久久久久久久久一区二区| 亚洲国产精品成人综合久久久| 久久久久国产精品一区三寸 | 7788色淫网站小说| 久久不射网站| 一区二区精品国产| swag国产精品一区二区| 奇米影视亚洲狠狠色| 尤物网在线观看| 精品国产一区二区三区av性色| 国产成人在线观看网站| 国产欧美一区二区三区在线老狼| 天堂中文av在线| 亚洲看片一区| 亚洲最大色综合成人av| 国产区精品视频在线观看豆花| 青青久久aⅴ北条麻妃| 精品黄色免费中文电影在线播放 | 亚洲色图14p| 久久成人av少妇免费| www.射射射| 久久精品国产68国产精品亚洲| 成人黄色片视频网站| 欧美舌奴丨vk视频| 久久久精品免费| 你懂的视频在线免费| 在线综合视频播放| 亚洲精品男人的天堂| 樱桃国产成人精品视频| 亚洲女优在线观看| 成人久久久精品乱码一区二区三区| 亚洲成人av免费看| 亚洲黄色毛片| 国产奶头好大揉着好爽视频| 久久av综合| 国产亚洲欧美另类一区二区三区| 国产成人精品一区二区三区视频| 午夜精品一区二区三区在线视| 二区三区在线观看| 亚洲色无码播放| 日本黄色大片视频| 91精品啪在线观看国产60岁| 无码人妻av一区二区三区波多野| 亚洲国产精品一区二区www| 老熟妇高潮一区二区三区| 久久九九久久九九| 影音先锋黄色资源| 国产激情91久久精品导航 | 成人午夜视频福利| 成人高清在线观看视频| 麻豆精品一区二区三区| 日本在线视频www| 国产毛片久久| 成人免费性视频| 欧美+日本+国产+在线a∨观看| 亚洲精品视频一区二区三区| 免费精品国产的网站免费观看| 国产精品久久7| 日韩在线亚洲| 91久久偷偷做嫩草影院| 懂色av色香蕉一区二区蜜桃| 国产欧美一区二区三区在线看| 欧美大片免费观看网址| 欧美诱惑福利视频| 日韩欧美精品一区二区三区| 午夜精品福利在线观看| 久草在线新免费首页资源站| 欧美大尺度在线观看| 爆操欧美美女| 欧美大片在线影院| 欧美xxxx黑人又粗又长| 欧美日韩爱爱视频| 青青在线视频| 高清一区二区三区四区五区 | 国产精品久久久久久久久久99| 一区二区三区四区日本视频| 国产成人精品久久久| 3d性欧美动漫精品xxxx软件| 国产精品高清在线| 91精品店在线| 91亚洲永久免费精品| 精品国产欧美| 国产精品久久久久久久久久久久午夜片| 88久久精品| 久久久久久九九九九| 蜜桃久久久久| 日本视频精品一区| 日韩在线观看| 伊人网在线免费| 亚洲第一网站| 日本在线观看a| 蜜桃av噜噜一区| 91亚洲一区二区| 成人小视频免费观看| 中国美女乱淫免费看视频| 亚洲国产高清不卡| 国产精品三区在线观看| 亚洲制服丝袜av| 亚洲永久精品在线观看| 欧美日韩一区二区在线视频| 国产伦子伦对白视频| 亚洲国产精品99| 国产精品麻豆一区二区三区| 欧美日韩另类一区| 国产精品久久久久久久一区二区 | 超碰人人cao| 91浏览器在线视频| 亚洲欧美另类日本| 亚洲成人av电影在线| 成人免费一级片| 欧美一级理论片| 青青九九免费视频在线| 日韩在线欧美在线国产在线| 国模私拍视频在线播放| 国产成人久久久精品一区| 国产免费区一区二区三视频免费| 国产麻豆乱码精品一区二区三区 | 秋霞一区二区| 日本一区二区三区视频在线播放| 亚洲欧洲美洲一区二区三区| 成人在线免费观看av| 精品一区二区三区在线观看| 亚洲国产精品自拍视频| 最近日韩中文字幕| 日韩 欧美 精品| 91麻豆精品国产91| 青青久草在线| 久久久视频免费观看| 国产原创一区| 免费看成人午夜电影| 一区二区在线| 妺妺窝人体色www在线观看| 福利一区二区在线| 欧美福利在线视频| 欧美日韩一区二区在线| www.国产欧美| 最新亚洲国产精品| 大胆人体一区二区| 国产精品三区www17con| 天天做天天爱天天综合网| 农村妇女精品一二区| 成人av电影在线网| 精品一区在线观看视频| 精品视频一区二区不卡| 免费资源在线观看| 国外成人在线直播| 久久九九精品视频| 亚洲欧美国产一区二区| 久久精品一区二区国产| 国产精品无码专区| 一区二区理论电影在线观看| 91精品人妻一区二区三区果冻| 亚洲天堂av高清| 日韩深夜视频| 久久av一区二区三区亚洲| 亚洲国产日本| 亚洲美女精品视频| 亚洲另类一区二区| av免费观看在线| 久久亚洲精品成人| www.欧美| 糖心vlog在线免费观看| 黑人巨大精品欧美黑白配亚洲| 色欲狠狠躁天天躁无码中文字幕| 一本色道久久综合狠狠躁的推荐| 日韩中文字幕观看| 97精品视频在线观看| 超碰cao国产精品一区二区| 欧美日韩dvd| 国产麻豆视频精品| 可以直接看的黄色网址| 欧美一级免费大片| 日本片在线观看| 国产超碰91| 亚洲精品视频啊美女在线直播| 永久免费未满蜜桃| 亚洲.国产.中文慕字在线| 五月婷婷六月丁香综合| 欧美性视频在线| 欧美色图国产精品| 性生活免费在线观看| 中文字幕一区二区三区乱码在线| 国产尤物视频在线观看| 欧美成人精品在线视频| ady日本映画久久精品一区二区| 黄色一级视频在线播放| 91蜜桃视频在线| 国产又粗又猛又爽又| 久久久999精品| 国产成人精品福利| 最近免费中文字幕中文高清百度| 国产日韩亚洲欧美综合| 一区二区三区日| 欧美精品做受xxx性少妇| 超碰在线亚洲| 成年人免费大片| 国产精品久久久久久久久免费樱桃| 国产露脸国语对白在线| 国产69精品久久久久99| 深爱激情综合| 三日本三级少妇三级99| 亚洲成精国产精品女| 国产鲁鲁视频在线观看免费| 成人激情视频免费在线| 亚洲第一黄色| 日本不卡一区视频| 日韩欧美国产精品一区| a欧美人片人妖| 久久久一二三四| 99麻豆久久久国产精品免费优播| 波多野结衣小视频| 久久久久久高潮国产精品视| 综合伊思人在钱三区| 欧美一级特黄aaa| 欧美日韩亚洲国产一区| 国产一区久久精品| 精品综合久久久| 激情综合网av| 五月天激情四射| 久国内精品在线| 日韩一区欧美| 强迫凌虐淫辱の牝奴在线观看| 欧美性视频一区二区三区| 免费在线播放电影| 手机在线观看国产精品| 不卡的av电影在线观看| 国产一区二区三区黄片| 人九九综合九九宗合|