付費限定

🖥️練習用 SwiftUI 畫 Mac mini:底部

更新 發佈閱讀 13 分鐘

接續前篇,繼續畫 Mac mini M4 的底部。

官網上的圖片是這樣:

raw-image



這一面最大的挑戰,是要怎麼畫出一整圈的散熱孔,以及塑膠殼與金屬機殼的同心圓角。如果你知道方法的話,其實很簡單。但我強烈建議你不要看答案,先自己想想看


這是我的實作與 Preview 截圖:

MacminiM4BottomView 與 Preview

MacminiM4BottomView 與 Preview

練習用的程式碼如下,完整版放在文章最後:

import SwiftUI

struct MacminiM4BottomView: View {
private let bodyWidth = 512.0

var body: some View {
chassis
.aspectRatio(1, contentMode: .fit)
.frame(width: bodyWidth)
.foregroundStyle(Color(white: 0.7))
.overlay {
plasticCover
}
.overlay {
vents
.frame(height: bodyWidth * 0.8)
}
.overlay {
macMiniLogo
}
.overlay(alignment: .topTrailing) {
powerButton
}
}

private var chassis: RoundedRectangle {
RoundedRectangle(cornerRadius: bodyWidth / 4)
}

@ViewBuilder
private var plasticCover: some View {
ContainerRelativeShape()
.aspectRatio(1, contentMode: .fit)
.foregroundStyle(Color(white: 0.2))
.padding(bodyWidth / 50)
.containerShape(chassis)
}

@ViewBuilder
private var vents: some View {
ZStack {
// 試著自行實作
}
}

@ViewBuilder
private var macMiniLogo: some View {
Text("Mac mini")
.font(.system(size: bodyWidth / 12))
.fontWeight(.medium)
.foregroundStyle(Color(white: 0.1))
}

@ViewBuilder
private var powerButton: some View {
Button(
action: {},
label: {
Circle()
.foregroundStyle(Color(white: 0.1))
.frame(width: bodyWidth / 12)
.overlay {
Image(systemName: "power")
.foregroundStyle(Color.white)
}
.padding(bodyWidth / 9)
}
)
}
}

#Preview {
MacminiM4BottomView()
}

macMiniLogo 與 powerButton 相對簡單,我就不做說明了。

塑膠殼與金屬機殼的同心圓角

金屬外殼 chassis 使用 RoundedRectangle。而它裡面一圈的則是黑色的塑膠殼。這部分的小挑戰是,怎樣畫出同心(concentric)的圓角?

我們可以使用 ContainerRelativeShape,並且用 .containerShape 指定它的 container 形狀就等於是 chassis 這個 RoundedRectangle。這樣子我們就不用自行計算內圈的 cornerRadius 要減多少,直接達到同心的效果。

怎麼畫一圈散熱孔

創作者正在準備中
請加入 13+ 了解最新動態!
留言
avatar-img
留言分享你的想法!
avatar-img
13+
2.3K會員
139內容數
13 以 10+ 年 iOS 開發經驗為基礎撰寫,助你在 AI 時代成為更有自信的技術工作者。 ❤️ 支持 13 創作! 🤖 AI 工具實戰經驗與深度思考 🧠 軟體開發思維、職涯發展建議 💡 實用技巧與踩坑經驗分享 😔 開發者身心健康與職業傷害
13+的其他內容
2025/10/16
講解用 SwiftUI 畫 Mac mini M4 正面的實作重點:機殼光澤、插孔與電源燈、以及底部散熱孔的畫法。
Thumbnail
2025/10/16
講解用 SwiftUI 畫 Mac mini M4 正面的實作重點:機殼光澤、插孔與電源燈、以及底部散熱孔的畫法。
Thumbnail
2025/10/14
講解用 SwiftUI 畫 Mac mini M4 俯視圖的實作重點,作為暖身練習。
Thumbnail
2025/10/14
講解用 SwiftUI 畫 Mac mini M4 俯視圖的實作重點,作為暖身練習。
Thumbnail
2025/10/13
學 SwiftUI 排版最單純又有趣的方式,就是拿它來畫東西。我在新手練習時畫過 MacBook Air 鍵盤,最近又為了教學畫了 Mac mini,程式碼都有開源供參考。
Thumbnail
2025/10/13
學 SwiftUI 排版最單純又有趣的方式,就是拿它來畫東西。我在新手練習時畫過 MacBook Air 鍵盤,最近又為了教學畫了 Mac mini,程式碼都有開源供參考。
Thumbnail
看更多
你可能也想看
Thumbnail
最近整理了一下蝦皮的訂單紀錄,發現自己這一年默默也回購了不少好用的東西~從生活療癒系的小物、實用的除臭保養、到打掃家裡必備的清潔用品都有。這次也順便一起整理了「準備在雙12補貨的清單」,如果剛好你也有在找類似的品項,希望這篇可以給你一些參考。 秘魯進口 高油版聖木 這款聖木我覺得很棒,就是聞起來
Thumbnail
最近整理了一下蝦皮的訂單紀錄,發現自己這一年默默也回購了不少好用的東西~從生活療癒系的小物、實用的除臭保養、到打掃家裡必備的清潔用品都有。這次也順便一起整理了「準備在雙12補貨的清單」,如果剛好你也有在找類似的品項,希望這篇可以給你一些參考。 秘魯進口 高油版聖木 這款聖木我覺得很棒,就是聞起來
Thumbnail
在這個網購紅海時代,你是否也跟作者一樣,最後總是點開蝦皮?從拯救文字工作者的老腰的護脊椅墊,到深夜腦力激盪必備的韓國不倒翁泡麵,作者分享了雙12購物清單中的兩樣「生存」與「靈魂」好物。更重要的是,文章揭露了「蝦皮分潤計畫」如何讓創作者低門檻變現,填滿你的小荷包,實現數位遊牧的夢想。
Thumbnail
在這個網購紅海時代,你是否也跟作者一樣,最後總是點開蝦皮?從拯救文字工作者的老腰的護脊椅墊,到深夜腦力激盪必備的韓國不倒翁泡麵,作者分享了雙12購物清單中的兩樣「生存」與「靈魂」好物。更重要的是,文章揭露了「蝦皮分潤計畫」如何讓創作者低門檻變現,填滿你的小荷包,實現數位遊牧的夢想。
Thumbnail
生完寶寶後 我真的深刻感受到一句話: 「睡不好,皮膚就先離家出走」 常常半夜起來哄寶寶、睡眠不規律 膚況也跟著黯淡、失去彈性>< 身為剛生完孩子的新手媽媽,我現在最在意的兩件事就是: 皮膚要彈潤、睡眠要穩定!! 這陣子我開始嘗試日夜搭配的膠原蛋白: 🌞 TIMESEAL 日間款
Thumbnail
生完寶寶後 我真的深刻感受到一句話: 「睡不好,皮膚就先離家出走」 常常半夜起來哄寶寶、睡眠不規律 膚況也跟著黯淡、失去彈性>< 身為剛生完孩子的新手媽媽,我現在最在意的兩件事就是: 皮膚要彈潤、睡眠要穩定!! 這陣子我開始嘗試日夜搭配的膠原蛋白: 🌞 TIMESEAL 日間款
Thumbnail
發現每天固定一個小動作,肌膚整體狀態真的會更穩定,照鏡子的心情也跟著好起來。 早上我習慣吃一包 TIMESEAL 早安膠原蛋白,粉末狀、很好入口,使用小分子技術,搭配維生素C與專利原料 ( 雙胜肽膠原、PANMOL® NADH)。對我來說,就是先把一天的彈潤感打好底,也讓整天狀態更有精神。 晚
Thumbnail
發現每天固定一個小動作,肌膚整體狀態真的會更穩定,照鏡子的心情也跟著好起來。 早上我習慣吃一包 TIMESEAL 早安膠原蛋白,粉末狀、很好入口,使用小分子技術,搭配維生素C與專利原料 ( 雙胜肽膠原、PANMOL® NADH)。對我來說,就是先把一天的彈潤感打好底,也讓整天狀態更有精神。 晚
Thumbnail
📢 精選 Apple 3C 皮革配件 折扣專區 📌爲科技生活保有手感與溫度 #Pp貓 #Apple #蘋果 #蘋果手機 #精選 #3C #皮革 #配件 #皮革配件 #優惠 #優惠專區 #折扣 #折扣專區 #Alto #義大利 (😁喜歡我的分享內容,請幫我點擊看一下~謝謝!) ⬇️說明
Thumbnail
📢 精選 Apple 3C 皮革配件 折扣專區 📌爲科技生活保有手感與溫度 #Pp貓 #Apple #蘋果 #蘋果手機 #精選 #3C #皮革 #配件 #皮革配件 #優惠 #優惠專區 #折扣 #折扣專區 #Alto #義大利 (😁喜歡我的分享內容,請幫我點擊看一下~謝謝!) ⬇️說明
Thumbnail
❗翻蓋手機包 三袋格休閒筆插袋腰掛 手機包 腰包 霹靂包 戰術包 登山包 產品尺寸:20X10X4CM 材料:1680D 牛津布 #Pp貓 #翻蓋手機包 #三袋格休閒筆插袋腰掛 #手機包 #腰包 #霹靂包 #戰術包 #登山包 #工作包 (😁喜歡我的分享內容,請幫我點擊看一下~謝謝!)
Thumbnail
❗翻蓋手機包 三袋格休閒筆插袋腰掛 手機包 腰包 霹靂包 戰術包 登山包 產品尺寸:20X10X4CM 材料:1680D 牛津布 #Pp貓 #翻蓋手機包 #三袋格休閒筆插袋腰掛 #手機包 #腰包 #霹靂包 #戰術包 #登山包 #工作包 (😁喜歡我的分享內容,請幫我點擊看一下~謝謝!)
Thumbnail
如果你已經習慣使用 Mac 蘋果電腦, 像是 MacBook Air、Macbook Pro 或是 iMac 來工作、 娛樂或查資料的話,那你一定很熟悉基本操作, 但其實還有蘋果電腦還有非常多隱藏的 Mac 功能與實用小技巧喔! 不論是應用在文書、辦公等等都非常實用,讓你在使用上更方便更有效
Thumbnail
如果你已經習慣使用 Mac 蘋果電腦, 像是 MacBook Air、Macbook Pro 或是 iMac 來工作、 娛樂或查資料的話,那你一定很熟悉基本操作, 但其實還有蘋果電腦還有非常多隱藏的 Mac 功能與實用小技巧喔! 不論是應用在文書、辦公等等都非常實用,讓你在使用上更方便更有效
Thumbnail
將我的 Macbook Pro 換成 Steam Deck OLED
Thumbnail
將我的 Macbook Pro 換成 Steam Deck OLED
Thumbnail
以往對於macOS系統都不會追求要更新到最新版本,儘管許多人推的macOS Sonoma免費版釋出後,也遲遲沒有升級XD。 直到知道升級後就能透過App Store下載copilot使用GPT-4就衝動更新了!(有聽說部分人的網頁版就可以直接選擇GPT-4?)
Thumbnail
以往對於macOS系統都不會追求要更新到最新版本,儘管許多人推的macOS Sonoma免費版釋出後,也遲遲沒有升級XD。 直到知道升級後就能透過App Store下載copilot使用GPT-4就衝動更新了!(有聽說部分人的網頁版就可以直接選擇GPT-4?)
Thumbnail
不知不覺CX4使用三個月了,so far so good。此前大半年為求輕便,賣掉ProBASE,換成Satechi Aluminum ,一整個感覺︰好慢喔。 Satechi Aluminum 是搬家前從apple官網購入,入手時外型、質感都很好,不便宜呢,差不多500HKD。可是實際使起
Thumbnail
不知不覺CX4使用三個月了,so far so good。此前大半年為求輕便,賣掉ProBASE,換成Satechi Aluminum ,一整個感覺︰好慢喔。 Satechi Aluminum 是搬家前從apple官網購入,入手時外型、質感都很好,不便宜呢,差不多500HKD。可是實際使起
Thumbnail
馬麻我其實是一個手機殼狂人 從一開始使用三星到拿蘋果 看到手機殼都招架不住 就想買 (一個給手機常常換衣服的概念XD)  但一般販售的手機殼都是制式的樣式 自從養了米豆跟米穀後 就想把身邊所有東西 都換成與他們有關的 像是時時刻刻陪著我的感覺
Thumbnail
馬麻我其實是一個手機殼狂人 從一開始使用三星到拿蘋果 看到手機殼都招架不住 就想買 (一個給手機常常換衣服的概念XD)  但一般販售的手機殼都是制式的樣式 自從養了米豆跟米穀後 就想把身邊所有東西 都換成與他們有關的 像是時時刻刻陪著我的感覺
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News