初嘗 SwiftUI編程 :點按彈窗

在開始寫點按彈窗之前刺洒,我們需要簡單了解什么是 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 由兩類代碼組成荤懂,分別是 ViewModifier。如下圖所示塘砸,這兩類代碼都可以在 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)杖爽。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市紫皇,隨后出現(xiàn)的幾起案子慰安,更是在濱河造成了極大的恐慌,老刑警劉巖聪铺,帶你破解...
    沈念sama閱讀 206,378評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件化焕,死亡現(xiàn)場離奇詭異,居然都是意外死亡铃剔,警方通過查閱死者的電腦和手機撒桨,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,356評論 2 382
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來键兜,“玉大人凤类,你說我怎么就攤上這事∑掌” “怎么了谜疤?”我有些...
    開封第一講書人閱讀 152,702評論 0 342
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我夷磕,道長履肃,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,259評論 1 279
  • 正文 為了忘掉前任坐桩,我火速辦了婚禮尺棋,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘绵跷。我一直安慰自己膘螟,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 64,263評論 5 371
  • 文/花漫 我一把揭開白布碾局。 她就那樣靜靜地躺著萍鲸,像睡著了一般。 火紅的嫁衣襯著肌膚如雪擦俐。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,036評論 1 285
  • 那天握侧,我揣著相機與錄音蚯瞧,去河邊找鬼。 笑死品擎,一個胖子當(dāng)著我的面吹牛埋合,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播萄传,決...
    沈念sama閱讀 38,349評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼甚颂,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了秀菱?” 一聲冷哼從身側(cè)響起振诬,我...
    開封第一講書人閱讀 36,979評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎衍菱,沒想到半個月后赶么,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,469評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡脊串,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,938評論 2 323
  • 正文 我和宋清朗相戀三年辫呻,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片琼锋。...
    茶點故事閱讀 38,059評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡放闺,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出缕坎,到底是詐尸還是另有隱情怖侦,我是刑警寧澤,帶...
    沈念sama閱讀 33,703評論 4 323
  • 正文 年R本政府宣布,位于F島的核電站础钠,受9級特大地震影響恰力,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜旗吁,卻給世界環(huán)境...
    茶點故事閱讀 39,257評論 3 307
  • 文/蒙蒙 一踩萎、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧很钓,春花似錦香府、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,262評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至袁稽,卻和暖如春勿璃,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背推汽。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工补疑, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人歹撒。 一個月前我還...
    沈念sama閱讀 45,501評論 2 354
  • 正文 我出身青樓莲组,卻偏偏與公主長得像,于是被迫代替她去往敵國和親暖夭。 傳聞我的和親對象是個殘疾皇子锹杈,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,792評論 2 345

推薦閱讀更多精彩內(nèi)容