在開始寫點按彈窗之前刺洒,我們需要簡單了解什么是 SwiftUI鳖宾。簡單來說,任何你在手機上看到的程序界面都叫 UI逆航,也就是交互界面鼎文。在手機應(yīng)用中,軟件開發(fā)者會使用不同的技術(shù)來實現(xiàn)界面的顯示因俐,流行的界面語言比如 Flutter拇惋,就是閑魚應(yīng)用的交互界面語言。而對于蘋果的設(shè)備抹剩,比如 Apple Watch撑帖,Mac,iPhone 或是 iPad澳眷,蘋果在 2019 年推出的官方 UI 編程語言則是 SwiftUI胡嘿。SwiftUI 集眾家之長,具有諸多優(yōu)秀特性境蔼,可以預(yù)見它將會出現(xiàn)在諸多應(yīng)用程序中灶平。若你有興趣,我會在其它文章中詳解 SwiftUI箍土,本文只著重講其中彈窗的寫法與邏輯逢享。
你會怎樣描述一個程序?
本文我將用如下圖中的一個例子來展示如何設(shè)置點按彈窗吴藻。下圖中程序的功能很簡單:長按這句名言后瞒爬,會出現(xiàn)點按彈窗,你可以點擊復(fù)制按鈕將這句話復(fù)制到系統(tǒng)剪貼板中沟堡。
試想你是一名美術(shù)侧但,完全不了解程序。而你眼前只有一位盲人程序員航罗,你想讓他幫你實現(xiàn)這個程序禀横,你會怎樣告訴你的程序員你想要的效果?
也許你會這樣和他說:
我這個程序上有一段名人名言粥血,中英文版柏锄,上面一行是「天助自助者」,下面是「God helps those who help themselves」我希望它能被點按選中复亏,選中的時候一定注意中英文兩句話要一起被選中趾娃,而且上下左右請留出邊距;對了缔御,選中后要彈出一個選項抬闷,左邊是復(fù)制,右邊是一個復(fù)制的圖標(biāo)耕突;啊笤成,對了對了评架,英語字體最好是圓體字,而且兩段文字都要加粗炕泳,就是小標(biāo)題加粗的那種感覺古程。
那么為什么我要說這些呢?因為 SwiftUI 的設(shè)計思路正是描述性編程語言喊崖,你將上面這段話稍微整理一下,就是 SiwftUI 的寫法雇逞。比如下面這段文字就是我整理好的 SwiftUI 代碼:
SwiftUI 由兩類代碼組成荤懂,分別是 View 和 Modifier。如下圖所示塘砸,這兩類代碼都可以在 Xcode 中直接拖出來用节仿,你要做的只是玩拼圖把它們拼在一起拼出你想要的功能。其中 View 表示一個視圖掉蔬,比如我們在手機上看到的一個滑條廊宪,一張圖片,一個列表等種種女轿,都叫做視圖箭启;而 Modifier 則是修飾器,它的作用是為視圖增加功能蛉迹,比如圓角傅寡,動畫,陰影北救,邊際荐操,背景等等。下圖就是它們在 Xcode 中的預(yù)設(shè)珍策。
寫 SwiftUI 得過程托启,實際上就是將一個個最基本的 View 像滾雪球一樣越包越大的過程,你把一個個基礎(chǔ)的視圖和修改器用一個更大的視圖包在一起攘宙,用修改器修改更大的視圖屯耸,就能實現(xiàn)復(fù)雜的功能。現(xiàn)在我們來觀察上述代碼的結(jié)構(gòu)模聋,你會發(fā)現(xiàn)整段代碼由一個名叫 VStack 的視圖和眾多 Modifier 組成肩民。
那么 VStack 是什么呢?它的里面為什么會包著兩個 Text 呢链方?其實 VStack 和 Text 本質(zhì)上都被歸為 View 這一類持痰,VStack 的作用是將兩段文字包在一起以便于被整體選中。而后面的全部代碼都是這個 VStack 視圖的修飾器祟蚀,為其添加顏色工窍,邊距割卖,以及點按彈窗功能。其中患雏,上圖的例子里的 View 又包含了兩個更小的 Text View鹏溯,每個 Text View 又被 .font 的字體修改器修改。
終于聊到了點按菜單的實現(xiàn)方式了淹仑,點按菜單是什么呢丙挽?它的實質(zhì)就是一個 View,和其它任何 View 并無二致匀借,因此我們需要在 contextMenu 里放一個 View 即可颜阐。而點按菜單,顧名思義吓肋,就是一個按鈕凳怨,那么我們設(shè)置一個 Button View。在按鈕中是鬼,我們需要設(shè)置兩個點:按鈕的動作肤舞,也就是 action,里面的兩行代碼會將名言文字復(fù)制到剪貼板均蜜;另一個點是下面的 HStack 李剖,表示一個水平排列的 View。其左邊是一個文字兆龙,右邊是一個圖標(biāo)杖爽。