Разработка
Карточка с частичным размытием в SwiftUI
В последнее время я часто вижу, как дизайнеры создают карточки товаров, в которых часть карточки, чаще всего нижняя, размыта, чтобы текст и описание было легче читать.
В последнее время я часто вижу, как дизайнеры создают карточки товаров, в которых часть карточки, чаще всего нижняя, размыта, чтобы текст и описание было легче читать.
Как в этом твите:
На этот раз я попытаюсь создать такой пользовательский интерфейс.
В SwiftUI есть способ справиться с размытием, используя такой эффект.
.blur(radius: 8) // blur effect
Обычно это используется для изображений или подобного контента.
В этом примере я хочу создать компонент размытия за областью представления.
Здесь я использую изображение в качестве образца, но его также можно применять к таблицам и другим элементам.
Для начала создадим карточку с фоновым изображением.
Затем добавим поверх неё размытие, которое размоет всё изображение.
import SwiftUI
struct BlurredCard: View {
let imageName: String
var body: some View {
ZStack {
// Background Image
Image(imageName)
.resizable()
.aspectRatio(contentMode: .fill)
.clipped()
.blur(radius: 8) // blur effect
.cornerRadius(20)
}
}
}
Затем добавим название, описание и кнопку «Добавить в корзину».
truct BlurredCard: View {
let imageName: String
let title: String
let description: String
let price: String
var body: some View {
ZStack {
// Background Image
Image(imageName)
.resizable()
.aspectRatio(contentMode: .fill)
.clipped()
.blur(radius: 8)
.cornerRadius(20)
VStack(alignment: .leading, spacing: 16) {
Spacer()
HStack {
// Title
Text(title)
.font(.title2)
.fontWeight(.bold)
.foregroundColor(.white)
.multilineTextAlignment(.leading)
Spacer()
Text(price)
.font(.system(size: 14))
.fontWeight(.bold)
.foregroundColor(.white)
.multilineTextAlignment(.leading)
}
// Description
Text(description)
.font(.body)
.foregroundColor(.white.opacity(0.9))
.multilineTextAlignment(.leading)
.lineLimit(3)
// Buy Button
Button(action: {
// Handle buy action
print("Buy button tapped for \(title)")
}) {
Text("Add to Cart")
.font(.system(size: 16, weight: .semibold))
.foregroundColor(.black)
.frame(maxWidth: .infinity)
.padding(.vertical, 16)
.background(Color.white)
.cornerRadius(24)
.padding(EdgeInsets(top: 0, leading: 16, bottom: 12, trailing: 16))
}
.buttonStyle(PlainButtonStyle())
}
.padding()
}
}
}
Итак, как нам сделать карту частично размытой?
Этого можно добиться, дублировав изображение и применив размытие только к дубликату, высота которого составляет половину высоты карточки.
Код будет выглядеть примерно так:
import SwiftUI
struct BlurredCard: View {
let imageName: String
let title: String
let description: String
let price: String
var body: some View {
ZStack {
// Background Image
Image(imageName)
.resizable()
.aspectRatio(contentMode: .fill)
.clipped()
VStack {
Spacer()
Image(imageName)
.resizable()
.frame(height: 200)
.clipped()
.blur(radius: 12) // blur effect
}
.cornerRadius(20)
VStack(alignment: .leading, spacing: 16) {
Spacer()
HStack {
// Title
Text(title)
.font(.title2)
.fontWeight(.bold)
.foregroundColor(.white)
.multilineTextAlignment(.leading)
Spacer()
Text(price)
.font(.system(size: 14))
.fontWeight(.bold)
.foregroundColor(.white)
.multilineTextAlignment(.leading)
}
// Description
Text(description)
.font(.body)
.foregroundColor(.white.opacity(0.9))
.multilineTextAlignment(.leading)
.lineLimit(3)
// Buy Button
Button(action: {
// Handle buy action
print("Buy button tapped for \(title)")
}) {
Text("Add to Cart")
.font(.system(size: 16, weight: .semibold))
.foregroundColor(.black)
.frame(maxWidth: .infinity)
.padding(.vertical, 16)
.background(Color.white)
.cornerRadius(24)
.padding(EdgeInsets(top: 0, leading: 16, bottom: 12, trailing: 16))
}
.buttonStyle(PlainButtonStyle())
}
.padding()
}
}
}
Вот пример того, как может выглядеть предварительный просмотр карточки, представленной выше:
struct TestBlurView: View {
var body: some View {
ScrollView {
VStack {
BlurredCard(
imageName: "alphonso_mango",
title: "Alphonso",
description: "Loved worldwide for their sweetness our Alphonso mangoes are a delicious delight wherever you are",
price: "$120"
)
.cornerRadius(64)
.frame(height: 300)
.padding(.top, 150)
.padding(.horizontal, 24)
}
}
}
}
#Preview {
TestBlurView()
}
Некоторые приложения используют этот эффект размытия, чтобы скрыть свои премиум-функции.
Если в вашем приложении есть премиум-функции, которые вы хотите частично скрыть, вы можете использовать этот метод размытия.
Спасибо за прочтение!
-
Аналитика магазинов3 недели назад
Мобильный рынок Ближнего Востока: исследование Bidease и Sensor Tower выявляет драйверы роста
-
Интегрированные среды разработки4 недели назад
Chad: The Brainrot IDE — дикая среда разработки с играми и развлечениями
-
Новости3 недели назад
Видео и подкасты о мобильной разработке 2025.46
-
Видео и подкасты для разработчиков2 недели назад
Разбор кода: iOS-приложение для управления личными финансами на Swift. Часть 1





