国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

SwiftUI 5.0(iOS 17)TipKit 讓用戶更懂你的 App

這篇具有很好參考價值的文章主要介紹了SwiftUI 5.0(iOS 17)TipKit 讓用戶更懂你的 App。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報違法"按鈕提交疑問。

SwiftUI 5.0(iOS 17)TipKit 讓用戶更懂你的 App,Apple開發(fā)入門,iOS 17,SwiftUI 5.0,TipKit,Xcode 15,Tip,提示,原力計劃

概覽

作為我們禿頭開發(fā)者來說,寫出一款創(chuàng)意炸裂的 App 還不足以吸引用戶眼球,更重要的是如何讓用戶用最短的時間掌握我們 App 的使用技巧。

SwiftUI 5.0(iOS 17)TipKit 讓用戶更懂你的 App,Apple開發(fā)入門,iOS 17,SwiftUI 5.0,TipKit,Xcode 15,Tip,提示,原力計劃

從 iOS 17 開始,? 推出了全新的 TipKit 框架專注于此事。有了它,我們再也不用自己寫 App 用戶幫助以及使用指南的邏輯和界面了。

使用 TipKit 非常簡單,接下來就讓我們一起走進(jìn) TipKit 的世界吧!

本文代碼全部在 Xcode 15 beta8 上編譯,在 iOS 17 beta8 上運(yùn)行。


什么是 TipKit?

SwiftUI 5.0(iOS 17)TipKit 讓用戶更懂你的 App,Apple開發(fā)入門,iOS 17,SwiftUI 5.0,TipKit,Xcode 15,Tip,提示,原力計劃

TipKit 是 ? 在 WWDC 23 上推出的一款新框架,用于在界面顯示提示(Tips)來幫助用戶快速發(fā)掘我們 App 的使用特性。

SwiftUI 5.0(iOS 17)TipKit 讓用戶更懂你的 App,Apple開發(fā)入門,iOS 17,SwiftUI 5.0,TipKit,Xcode 15,Tip,提示,原力計劃
SwiftUI 5.0(iOS 17)TipKit 讓用戶更懂你的 App,Apple開發(fā)入門,iOS 17,SwiftUI 5.0,TipKit,Xcode 15,Tip,提示,原力計劃

目前該框架仍屬于 beta 階段,意味著它還有很多不確定性。

如果我沒有記錯,? 直到 Xcode beta4 才將 TipKit 提供給開發(fā)者,而且現(xiàn)在? 官網(wǎng) TipKit 的示例代碼在 Xcode beta8 中已提示語法錯誤了(我們后面會說明):

SwiftUI 5.0(iOS 17)TipKit 讓用戶更懂你的 App,Apple開發(fā)入門,iOS 17,SwiftUI 5.0,TipKit,Xcode 15,Tip,提示,原力計劃


對于 ? 這種習(xí)慣性“謎之”行為的更多細(xì)節(jié),感興趣的小伙伴們可以到如下鏈接中觀賞:

  • 有用的知識又增加了:為何無法編譯某些 ? WWDC 官方視頻中的代碼?

創(chuàng)建一個 Tip

按照 SwiftUI 的“習(xí)性”,一個 Tip 同時意味著外觀和邏輯雙重含義。

創(chuàng)建一個提示很簡單,只需遵循 Tip 協(xié)議即可:

struct FavoriteTip: Tip {
    var title: Text {
        Text("收藏最愛的圖片")
            .bold()
    }
    
    var message: Text? {
        Text("將心儀的圖片保存到相冊中")
            .font(.headline)
            .foregroundStyle(.gray.gradient)
    }
}

Tip 協(xié)議還有很多其它可選屬性,比如我們還可以為 Tip 界面進(jìn)一步增加圖片修飾:

struct FavoriteTip: Tip {
    var image: Image? {
        Image(systemName: "heart")
    }
}

TipKit 顯示的兩種方式

在 Tip 創(chuàng)建之后如何顯示它們呢?有兩種方式:嵌入和彈出。

我們可以直接將 Tip 嵌在視圖中:

struct ContentView: View {
    let favTip = FavoriteTip()
    
    var body: some View {
        NavigationStack {
            VStack {
                
                TipView(favTip)
            }
            .padding()
            .navigationTitle("TitKit演示")
        }
    }
}

顯示效果如下:

SwiftUI 5.0(iOS 17)TipKit 讓用戶更懂你的 App,Apple開發(fā)入門,iOS 17,SwiftUI 5.0,TipKit,Xcode 15,Tip,提示,原力計劃

或者我們還可以將 Tip 直接依附于某一個視圖,比如圖片或按鈕:

struct ContentView: View {
    let favTip = FavoriteTip()
    
    var body: some View {
        NavigationStack {
            VStack {...}
            .padding()
            .navigationTitle("TitKit演示")
            .toolbar {
                ToolbarItem {
                    Image(systemName: "heart")
                        .font(.title.weight(.black))
                        .foregroundStyle(.pink.gradient)
                        .popoverTip(favTip, arrowEdge: .top)
                }
            }
        }
    }
}

SwiftUI 5.0(iOS 17)TipKit 讓用戶更懂你的 App,Apple開發(fā)入門,iOS 17,SwiftUI 5.0,TipKit,Xcode 15,Tip,提示,原力計劃

我們可以根據(jù)不同需求來組合使用這兩種顯示方式。

TipKit 全局配置

其實(shí),TipKit 框架會在 App (本地目錄)中存放一些相關(guān)的配置信息。理論上說,它們可能會通過 iCloud 同步到其它設(shè)備上去,這意味著在不同設(shè)備上相同 App 中的 TipKit 共享同一組配置。

我們可以進(jìn)一步定制 TipKit 的配置細(xì)節(jié),比如 Tip 顯示頻率、配置數(shù)據(jù)庫保存的本地位置等等:

import SwiftUI
import TipKit

@main
struct TipKitTestApp: App {
    var body: some Scene {
        WindowGroup {
            ContentView()
                .task {                    
                    try? Tips.configure([
                        .displayFrequency(.immediate),
                        .datastoreLocation(.applicationDefault)
                    ])
                    
                    // Xcode 15 beta4 中過時的語法,目前已不能使用:
                    /*
                    try? await Tips.configure {
                        DisplayFrequency(.immediate)
                        DatastoreLocation(.applicationDefault)
                    }*/
                }
        }
    }
}

如上代碼所示,我們需要所有 Tip 立即顯示,并且讓系統(tǒng)決定配置數(shù)據(jù)存儲的位置(我們也可以自己設(shè)置存儲路徑)。

在代碼中,我們注釋了之前官方示例中出錯的代碼片段,這些代碼在 Xcode 15 beta8 中已不能使用。

TipKit 顯示規(guī)則

除了全局 Tip 顯示限制以外,我還可以設(shè)置單個 Tip 之間的顯示規(guī)則。

比如,假設(shè)有兩個提示,我們希望 FavoriteTip 在 StartTip 提示關(guān)閉后再顯示,我們可以在 FavoriteTip 中用特定的規(guī)則(Rule)來表示這一約束:

struct FavoriteTip: Tip {
    // 其它代碼從略
    
    var rules: [Rule] {
        #Rule(Self.$startTipHasDisplayed) { $0 == true}
    }
    
    @Parameter
    static var startTipHasDisplayed: Bool = false
    
}

現(xiàn)在,我們需要在 StartTip 提示關(guān)閉時將 FavoriteTip.startTipHasDisplayed 置為 true 才能觸發(fā) FavoriteTip 的顯示:

struct ContentView: View {
    
    let startTip = StartTip()
    let favTip = FavoriteTip()
    
    var body: some View {
        NavigationStack {
            
            VStack {
                
                Image("1")
                    .resizable()
                    .aspectRatio(contentMode: .fill)
                    .onTapGesture {
                        // 關(guān)閉 startTip 提示
                        startTip.invalidate(reason: .actionPerformed)
                        // 觸發(fā) FavoriteTip 提升的顯示
                        FavoriteTip.startTipHasDisplayed = true
                    }
                
                TipView(startTip)
            }
            .padding()
            .navigationTitle("TitKit演示")
            .toolbar {
                ToolbarItem {
                    Image(systemName: "heart")
                        .font(.title.weight(.black))
                        .foregroundStyle(.pink.gradient)
                        .popoverTip(favTip, arrowEdge: .top)
                }
            }
        }
    }
}

現(xiàn)在,只有等 StartTip 關(guān)閉后,F(xiàn)avoriteTip 提示才能顯示出來:
SwiftUI 5.0(iOS 17)TipKit 讓用戶更懂你的 App,Apple開發(fā)入門,iOS 17,SwiftUI 5.0,TipKit,Xcode 15,Tip,提示,原力計劃

為 TipKit 增加更多互動性

有時,我們希望提示為用戶提供更豐富的交互功能,比如在 Tip 中提供按鈕跳轉(zhuǎn)到更詳細(xì)的使用教程界面。

TipKit 為此也提供了很好的支持,我們可以為 Tip 添加 Action 來驅(qū)動交互行為:

struct FavoriteTip: Tip {
    // 其它代碼從略
    
    var actions: [Action] {
        [
            Tip.Action(id: "learn-more", title: "了解更多"),
            Tip.Action(id: "forget", title: "下次再說")
        ]
    }
}

在 Tip Action 被觸發(fā)時,我們可以執(zhí)行自定義行為:

struct ContentView: View {
    
    let startTip = StartTip()
    let favTip = FavoriteTip()
    
    var body: some View {
        NavigationStack {
            
            VStack {
                
                Image("1")
                    .resizable()
                    .aspectRatio(contentMode: .fill)
                    .onTapGesture {
                        startTip.invalidate(reason: .actionPerformed)
                        
                        FavoriteTip.startTipHasDisplayed = true
                    }
                
                TipView(startTip)
            }
            .padding()
            .navigationTitle("TitKit演示")
            .toolbar {
                ToolbarItem {
                    Image(systemName: "heart")
                        .font(.title.weight(.black))
                        .foregroundStyle(.pink.gradient)
                        .popoverTip(favTip, arrowEdge: .top){ action in
                            switch action.index {
                            case 0:
                                favTip.invalidate(reason: .tipClosed)

                                // 跳轉(zhuǎn)到詳細(xì)使用教程
                            case 1:
                                favTip.invalidate(reason: .tipClosed)
                                
                                // 直接退出提示
                            default:
                                break
                            }
                        }
                }
            }
        }
    }
}

現(xiàn)在,用戶可以選擇“了解更多”來進(jìn)一步學(xué)習(xí) App 的使用“秘技”了:

SwiftUI 5.0(iOS 17)TipKit 讓用戶更懂你的 App,Apple開發(fā)入門,iOS 17,SwiftUI 5.0,TipKit,Xcode 15,Tip,提示,原力計劃

如何測試 TipKit?

TipKit 全局配置存儲在本地帶有持久化特性,為了便于開發(fā)者即時測試,? 提供了一些方法來快速顯示或隱藏全部或指定 Tip:

SwiftUI 5.0(iOS 17)TipKit 讓用戶更懂你的 App,Apple開發(fā)入門,iOS 17,SwiftUI 5.0,TipKit,Xcode 15,Tip,提示,原力計劃

一般的,要想在 Xcode 預(yù)覽中正確測試 TipKit 的行為,我們需要在每次視圖刷新時重置 TipKit 數(shù)據(jù)庫,否則 Tip 不會正常顯示:

#Preview {
    ContentView()
        .task {
            // 在每次視圖刷新時將 TipKit 數(shù)據(jù)庫重置為初始狀態(tài)
            try? Tips.resetDatastore()
            
            try? Tips.configure([
                .displayFrequency(.immediate),
                .datastoreLocation(.applicationDefault)
            ])
        }
}

總結(jié)

在本篇博文中,我們介紹了 SwiftUI 5.0(iOS 17)中新引進(jìn)的開發(fā)框架 TipKit,使用它我們可以非常方便和快速的向用戶介紹我們 App 中的各種特性和使用指南,小伙伴們還不快操練起來!

感謝觀賞,再會!??文章來源地址http://www.zghlxwxcb.cn/news/detail-706235.html

到了這里,關(guān)于SwiftUI 5.0(iOS 17)TipKit 讓用戶更懂你的 App的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包