WWDC 25 給自定義 SwiftUI 視圖穿上“玻璃外衣”:最新 Liquid Glass 皮膚詳解

在這里插入圖片描述

引子

各位 iOS 足球體育健兒們,且聽我一言!想當年在《少林足球》里,阿星一句“做人如果沒夢想,那跟咸魚有什么分別啊?”點燃了多少人的江湖夢。

在這里插入圖片描述

如今在 SwiftUI 江湖里,Apple 于 WWDC 25 推出的 Liquid Glass 設計語言,就像那本失傳已久的足球訓練秘籍——輕輕一抖,各位寶子們的界面就能從“街邊攤”秒變“五星酒店”,通透得讓用戶直呼“好嘢!”。

在本堂足球特訓課中,您將學到如下內容:

    • 引子
    • 1. 玻璃效果的“內功心法”:不只是塊透明玻璃哦
    • 2. 玻璃絕招:regular 一招致命
    • 3. 炫彩大招 tint:讓玻璃更“透光”
    • 4. 互動秘籍 interactive():讓玻璃“有反應”
    • 5. 形狀自由換:圓形、方形任你挑
    • 訓練結束:總結

前陣子咱們聊過給標簽欄和工具欄“貼玻璃膜”的功夫,今天就再來深扒這門絕學的進階招式:給自定義視圖穿上“玻璃衣”。保證讓小伙伴們的 UI 效果,比大師兄的鐵頭功還硬氣,比阿梅的太極推手還順滑!

那還等什么呢?Let’s do it!!!😉


1. 玻璃效果的“內功心法”:不只是塊透明玻璃哦

要說這 glassEffect 修飾符,可絕非“貼塊透明塑料布”那么簡單。

在這里插入圖片描述

它就像身懷內功的高手,能和背后的視圖“眉目傳情”——背后是紅花,它就帶點胭脂氣;背后是綠葉,它就沾點青黛色。

更絕的是,它還能根據背后內容的明暗,自動切換視圖的配色方案,從亮色到暗色,比星爺在電影里切換表情還靈活自如!

先來看段入門級代碼,感受下這“內功”的威力:

import SwiftUIstruct ContentView: View {var body: some View {NavigationStack {ScrollView {// 下面這些彩色塊就像背景里的“群眾演員”,負責襯托玻璃效果Color.red.frame(height: 300)Color.yellow.frame(height: 300)Color.green.frame(height: 300)Color.black.frame(height: 300)Color.orange.frame(height: 300)Color.blue.frame(height: 300)Color.brown.frame(height: 300)}// 在底部安全區“安插”一個帶玻璃效果的視圖,像站在前臺的主角.safeAreaInset(edge: .bottom) {Text("Hello, World!").font(.largeTitle.weight(.black)).padding(.horizontal).foregroundStyle(.blue).padding().glassEffect() // 就這一句,直接給文字“穿上玻璃衣”,是不是so easy?.padding()}.ignoresSafeArea()}}
}

瞧見沒?只需給視圖加個 .glassEffect(),SwiftUI 就像貼心的場務,把所有“玻璃效果”的細節都給你安排得明明白白。

在這里插入圖片描述

但這只是皮毛,真正的足球高手,還得會玩花樣!

2. 玻璃絕招:regular 一招致命

就像少林功夫有七十二絕技,這玻璃效果也有幾招壓箱底的功夫,分別是 regular(常規款)、tint(炫彩款)和 interactive(激情款)。它們都是 Glass 類型的“預制招式”,各有各的妙用。

在這里插入圖片描述

先說說這 identity 招,堪稱“開關神器”。想讓玻璃效果時有時無?用它準沒錯,比阿星關掉水龍頭還利索。

看個例子:

struct ContentView: View {@State private var isEnabled = true // 控制玻璃效果的“開關”,像個盡職盡責的裁判var body: some View {NavigationStack {ScrollView {// 下面這些彩色塊就像背景里的“群眾演員”,負責襯托玻璃效果Color.red.frame(height: 300)Color.yellow.frame(height: 300)Color.green.frame(height: 300)Color.black.frame(height: 300)Color.orange.frame(height: 300)Color.blue.frame(height: 300)Color.brown.frame(height: 300)}// 在底部安全區“安插”一個帶玻璃效果的視圖,像站在前臺的主角.safeAreaInset(edge: .bottom) {Text("Hello, World!").font(.largeTitle.weight(.black)).padding(.horizontal).foregroundStyle(.blue).padding()// 條件判斷:打開時用 regular 招,切換自如.glassEffect(.regular, isEnabled: isEnabled).padding()}.navigationTitle("自定義玻璃外衣").toolbar {// 加個開關按鈕,讓用戶自己掌控“玻璃效果”的有無,貼心到家Toggle("玻璃效果", isOn: $isEnabled)}.ignoresSafeArea()}}
}

現在,我們可以隨心所欲的開關”玻璃外衣“了,就問寶子們贊不贊吧:
在這里插入圖片描述

3. 炫彩大招 tint:讓玻璃更“透光”

如果說 regular 是“標準套餐”,那 tint 就是“炫彩版”—— 更加明艷動人,就像剛擦過的玻璃,連蒼蠅站在上面都得打滑!更妙的是,它能加“ tint(色調)”,給玻璃染上點“個性色彩”,就像給阿星的球鞋加個酷炫配色。

且看代碼:

.glassEffect(.regular.tint(.red.opacity(0.77)), isEnabled: isEnabled)

這 tint 就像給玻璃“上妝”,紅的、綠的、藍的… 想啥色就啥色,比阿梅的胭脂盒還豐富多彩呢!

在這里插入圖片描述

4. 互動秘籍 interactive():讓玻璃“有反應”

光好看還不夠,得“有互動”才算真功夫!Glass 類型里的 interactive() 方法,就是讓玻璃效果“活”起來的關鍵。

在這里插入圖片描述

加了它,玻璃不僅能“倒映”背后的內容,還能對點擊、拖動等手勢“敏感”起來,像個反應敏捷的守門員,球來必接!

下面來一段代碼演示:

struct CustomView: View {var body: some View {ScrollView {// 背景依舊“忙忙碌碌”,襯托互動效果Color.red.frame(height: 300)Color.yellow.frame(height: 300)Color.green.frame(height: 300)Color.black.frame(height: 300)Color.orange.frame(height: 300)Color.blue.frame(height: 300)Color.brown.frame(height: 300)}.safeAreaInset(edge: .bottom) {Text("Hello, World!").padding()// 加了 interactive(),玻璃就從“靜態畫”變成“互動高手”.glassEffect(.regular.tint(.red.opacity(0.77)).interactive(), isEnabled: isEnabled)}}
}

有了它,你的玻璃視圖就像少林隊的球員,既能“秀顏值”,又能“拼實力”,用戶體驗直接上了三個臺階!棒棒噠💯

在這里插入圖片描述

5. 形狀自由換:圓形、方形任你挑

默認的玻璃效果是“隨形就勢”的,但如果你想玩點花樣,比如弄個圓形玻璃、圓角矩形玻璃,SwiftUI 也能滿足你。

就像電影里阿星把足球踢成各種弧線,玻璃的形狀也能“隨心所欲”。

最后看這個例子吧:

struct CustomView: View {var body: some View {ScrollView {// 背景色繼續“當綠葉”Color.red.frame(height: 300)Color.yellow.frame(height: 300)Color.green.frame(height: 300)Color.black.frame(height: 300)Color.orange.frame(height: 300)Color.blue.frame(height: 300)Color.brown.frame(height: 300)}.safeAreaInset(edge: .bottom) {Text("Hello, World!").padding()// 第二個參數指定形狀,這里用 .circle 讓玻璃變成圓形,是不是很酷炫?.glassEffect(.regular.tint(.red.opacity(0.77)).interactive(), in: .circle, isEnabled: isEnabled)}}
}

除了圓形,你還能換成 .rectangle(矩形)、.capsule(膠囊形),甚至自定義形狀,想象力有多大,玻璃就能多“奇葩”(褒義的哈)!

在這里插入圖片描述

訓練結束:總結

最后說句掏心窩子的話:在 SwiftUI 里給自定義視圖加玻璃效果,就像給少林足球加個“旋風腿”——簡單幾行代碼,效果卻能“驚為天人”。

在這里插入圖片描述

這 Liquid Glass 設計語言,看似復雜,實則“入門容易精通難”,但只要你肯多練,保準能讓你的 App 界面“帥到沒朋友”!

在這里插入圖片描述

記住,搞 UI 設計就像踢足球,不追求花里胡哨,只追求“用戶說好”。下次再有人問你:“你的 App 界面怎么這么好看?” 你就可以瀟灑地說:“其實呢,我只是懂點‘玻璃功夫’而已!”


WWDC 25 更多 App 界面中的精妙改動,請各位寶子們移步如下鏈接觀賞精彩的內容:

  • SwiftUI 7 新 WebView:金蛇出洞,網頁江湖換新天
  • WWDC 25 風云再起:SwiftUI 7 Charts 心法從 2D 到 3D 的華麗蛻變
  • SwiftUI 7(iOS 26 / iPadOS 26)中玻璃化標簽頁的全新玩法
  • SwiftUI 7 江湖新風:WWDC25 揭曉神秘武林志
  • SwiftUI 7(iOS 26)中玻璃化工具欄的藝術

那么,各位微禿寶子運動健將們,咱們下次再聊更多的 SwiftUI 絕學,不見不散!😎

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/90158.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/90158.shtml
英文地址,請注明出處:http://en.pswp.cn/web/90158.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Day01_C++

01.思維導圖02.方法一&#xff1a;#include <iostream> #include <cstring> #include <iostream> using namespace std; class mystring { private:char* buf;int len;public:mystring(const char* str);void copy(const char* ptr);void copy(mystring ptr)…

C語言學習(days09)

二維數組的定義與特性二維數組的聲明格式為&#xff1a;類型說明符 數組名[表達式1][表達式2];[下標1]表示行索引&#xff0c;[下標2]表示列索引。二維數組可視為由多個一維數組組成&#xff0c;a[0]表示第0行的首地址&#xff08;即一維數組地址&#xff09;a[0][0]表示第0的第…

WIFI路由器長期不重啟,手機連接時提示無IP分配

今天在公司&#xff0c;突然發現手機連不上公司WIFI。每次鏈接&#xff0c;提示無IP分析。我以為是我手機出問題了&#xff0c;想復位一下。后來一想萬一復位還是不靈&#xff0c;怎么辦&#xff1f;同事認為是路由器沒有重啟的原因。于是找到路由器&#xff0c;重啟&#xff0…

【前沿技術動態】【AI總結】RustFS:從 0 到 1 打造下一代分布式對象存儲

目錄1 引言&#xff1a;為什么我們又需要一個新的對象存儲2 RustFS 全景速覽3 技術架構深度拆解3.1 整體拓撲3.2 關鍵數據結構&#xff08;rust 偽代碼&#xff09;3.3 讀寫路徑&#xff08;寫放大 < 1.1&#xff09;4 核心源碼導讀4.1 關鍵函數跟蹤4.2 一段最小可復現示例5…

ImageNet1K數據集的下載解壓與處理

前言 博主因為這個數據集踩了好多坑&#xff0c;浪費了好幾天時間&#xff0c;最近終于找到了高效的辦法&#xff0c;寫此篇文章來記錄具體操作方法&#xff0c;也希望可以幫助到有需要的人。&#xff08;主要是在云服務器是使用&#xff09; 下載數據集 一共下載三個文件&…

OkHttp 與 Room 結合使用:構建高效的 Android 本地緩存策略

前言在現代 Android 應用開發中&#xff0c;網絡請求與本地數據持久化是兩大核心功能。OkHttp 作為強大的網絡請求庫&#xff0c;與 Jetpack Room 持久化庫的結合使用&#xff0c;可以創建高效的數據緩存策略&#xff0c;提升應用性能和用戶體驗。本文將詳細介紹如何將這兩者完…

Nacos中feign.FeignException$BadGateway: [502 Bad Gateway]

Nacos中feign.FeignException$BadGateway: [502 Bad Gateway] 文章目錄Nacos中feign.FeignException$BadGateway: [502 Bad Gateway]背景原因背景 Mac本地運行Nacos微服務項目&#xff0c;調用服務失敗 原因 關閉本地代理clash或者其他&#xff0c;windows沒發現問題&#x…

基于deepseek的LORA微調

LORA微調&#xff1a; 核心是&#xff1a;低秩轉換&#xff0c;減少參數。凍結大部分&#xff0c;調節部分模塊(注意力模塊的Wq&#xff0c;Wk&#xff0c;Wv)。 調整過后得到一個lora.safetensors, 內部記錄了(detail W: 即部分修改的W)。推理使用原權重和lora權重。 具體操…

Linux運維新手的修煉手扎之第22天

Tomcat服務1 java項目部署方式&#xff1a;war包部署、jar包部署、源代碼部署2 Ubuntu環境部署Java - openjdk[熟練]:#安裝軟件rootubuntu24-13:~# apt update; apt list openjdk*rootubuntu24-13:~# apt install openjdk-11-jdk -y#檢測效果rootubuntu24-13:~# whereis javaja…

Python爬蟲實戰:研究Genius庫相關技術

1. 引言 在當今數字化時代,音樂數據的分析與挖掘成為了音樂學、計算機科學等領域的研究熱點。歌詞作為音樂的重要組成部分,蘊含著豐富的情感、文化和社會信息。通過對歌詞數據的分析,可以揭示音樂風格的演變、流行趨勢的變化以及社會情緒的波動等。 Genius 是一個專注于歌詞…

內核協議棧源碼閱讀(一) ---驅動與內核交互

文章目錄 一、硬中斷 1.1 `e100_intr` 1.2 `__netif_rx_schedule` 1.3 補充: 二、軟中斷 2.1 net_rx_action 2.2 e100_poll 2.3 補充 三、非 NAPI 的軟中斷處理 3.1 netif_rx 3.2 backlog_dev->poll 3.3 補充 四、總結 以 e100_intr 為例: 一、硬中斷 1.1 e100_intr 網卡…

Vue3 面試題及詳細答案120道(61-75 )

《前后端面試題》專欄集合了前后端各個知識模塊的面試題&#xff0c;包括html&#xff0c;javascript&#xff0c;css&#xff0c;vue&#xff0c;react&#xff0c;java&#xff0c;Openlayers&#xff0c;leaflet&#xff0c;cesium&#xff0c;mapboxGL&#xff0c;threejs&…

ubuntulinux快捷鍵

1.復制文件使用cp命令。cp是復制的簡寫。語法也很簡單。使用&#xff0c;cp后跟要復制的文件以及要將其移動到的目的地cp ~/Downloads/your-file.txt ~/Documents/2.復制文件夾為了復制文件夾及其內容&#xff0c;您將需要告訴cp命令以遞歸方式復制。使用-r標志就足夠簡單了。c…

將 `knife4j` 和 `springdoc-openapi` 集成到你的 Spring Boot 應用

集成 knife4j 和 springdoc-openapi 可以讓你在 Spring Boot 應用中擁有更美觀和功能豐富的 API 文檔界面。knife4j 是基于 Swagger 的一個 UI 增強包,而 springdoc-openapi 則是用于生成 OpenAPI 3 文檔的庫。下面是如何將兩者集成到你的 Spring Boot 項目中的步驟。 步驟 1…

split() 函數在 Java、JavaScript 和 Python 區別

split() 函數在 Java、JavaScript 和 Python 中均用于字符串分割&#xff0c;但在語法、參數設計和行為上存在顯著差異。以下是三者的核心區別及使用示例&#xff1a;1. ??語法與參數設計????語言????語法????參數說明????Java??String.split(regex, limit…

zabbix基于GNS3監控部署

目錄 一、配置 二、zabbix配置 一、配置 1.添加路由和主機 f2接口配置192.168.80.254 f3接口配置192.168.90.254 R2的f3接口配置192.168.33.200 2.配置虛擬機ip網關 web1 web2 3.測試三臺主機zhijianshifoutongxin ping pc1 ping pc2 4.在R2網關中配置專業模式下設置共同體…

Java編程與GMSEC_API在UE4集成的筆試實戰

本文還有配套的精品資源&#xff0c;點擊獲取 簡介&#xff1a;本次4399游戲公司的Java筆試題主要針對應聘者的編程能力&#xff0c;特別強調了與游戲開發相關的技術知識。題目的核心內容是使用Java環境下的GMSEC_API與流行的游戲引擎Unreal Engine 4進行交互。這不僅考察了…

學習C++、QT---33(QT庫中如何使用事件過濾器實現我們的放大縮小字體功能)

&#x1f31f; 嗨&#xff0c;我是熱愛嵌入式的濤濤同學&#xff01;每日一言別害怕改變&#xff0c;走出舒適圈才能遇見更好的自己。實現完這個之后我們來接觸一下事件過濾器來實現這個功能吧好的那么我們的這個事件過濾器的這個函數在QObject類里面這邊也有相對應的代碼案例進…

[每日隨題15] 前綴和 - 拓撲排序 - 樹狀數組

整體概述 難度&#xff1a;1000 →\rightarrow→ 1500 →\rightarrow→ 2000 1567B. MEXor Mixup 標簽&#xff1a;前綴和 前置知識&#xff1a;無 難度&#xff1a;Div.2.B 1000 題目描述&#xff1a; 輸入格式&#xff1a; 輸出格式&#xff1a; 樣例輸入&#xff1a; …

DDD領域驅動設計C++實現案例:訂單管理系統

一、DDD核心概念簡介 領域驅動設計(Domain-Driven Design)是一種軟件開發方法論&#xff0c;強調將業務領域的概念和規則融入軟件設計中。核心概念包括&#xff1a; 值對象(Value Object): 無唯一標識&#xff0c;基于屬性值判斷相等性實體(Entity): 有唯一標識&#xff0c;其生…