Я создаю коллекционную карточную игру, в которой мы с друзьями можем создавать карточки, вводя нашу статистику и делясь ею. Однако у меня возникли проблемы с пользовательским интерфейсом карты, потому что я хочу иметь возможность отображать карты в разных областях, где масштаб разный, но соотношение сторон одинаковое (почти как если бы представление карты было изображением). Как лучше всего добиться этого, если я пытаюсь создать универсальное многоразовое представление?
Это то, что у меня пока получилось.
Подвиды никогда не выстраиваются в линию и не масштабируются должным образом. Я новичок в Swift UI и до сих пор не знаю лучших практик, поэтому буду рад любому вкладу.
struct CardView: View {
var body: some View {
GeometryReader { geometry in
let width = geometry.size.width
let height = geometry.size.height
let headerHeight = height / 12
let cardPadding = width * 0.03
VStack(spacing: height * 0.02) {
CardHeaderView()
.frame(maxHeight: headerHeight)
CardImageView()
CardContentView()
Spacer()
}
.padding(.all, cardPadding)
.background(
Image("texture")
.resizable()
.scaledToFill()
.clipped()
)
.border(Color.red, width: width * 0.01)
.clipped()
}
.aspectRatio(2.5 / 3.5, contentMode: .fit)
}
}
// one subview as an example
struct hpView: View {
@State private var isMovingAround = false
var body: some View {
GeometryReader { geometry in
let width = geometry.size.width
let height = geometry.size.height
let hpWidth = width * 1
let hpHeight = height * 1
ZStack {
RoundedRectangle(cornerRadius: height / 2)
.frame(width: hpWidth, height: hpHeight)
.foregroundStyle(.indigo.gradient)
RoundedRectangle(cornerRadius: height / 2)
.strokeBorder(style: StrokeStyle(lineWidth: 4, lineCap: .round, lineJoin: .round, dash: [40, 400], dashPhase: isMovingAround ? 220 : -220))
.frame(width: hpWidth, height: hpHeight)
.foregroundStyle(
LinearGradient(gradient: Gradient(colors: [.indigo, .white, .purple, .mint, .white, .orange, .indigo]), startPoint: .trailing, endPoint: .leading)
)
.shadow(radius: 2)
HStack(spacing: 2) {
Text("HP")
.foregroundStyle(Color.white)
.font(.system(size: hpHeight - 10, weight: .bold))
.italic()
ZStack {
Circle()
.fill(
RadialGradient(
gradient: Gradient(colors: [.white, .blue]),
center: .center,
startRadius: -10,
endRadius: 20
)
)
.frame(width: height - 4, height: height - 4)
Text("96")
.foregroundStyle(Color.white)
.font(.system(size: hpHeight * 0.5, weight: .bold))
}
}
}
.onAppear {
withAnimation(.linear.speed(0.1).repeatForever(autoreverses: false)) {
isMovingAround.toggle()
}
}
}
}
}
Подробнее здесь: https://stackoverflow.com/questions/793 ... hat-scales
Создайте многоразовое композиционное представление быстрого пользовательского интерфейса, которое масштабируется. ⇐ IOS
Программируем под IOS
1736339109
Anonymous
Я создаю коллекционную карточную игру, в которой мы с друзьями можем создавать карточки, вводя нашу статистику и делясь ею. Однако у меня возникли проблемы с пользовательским интерфейсом карты, потому что я хочу иметь возможность отображать карты в разных областях, где масштаб разный, но соотношение сторон одинаковое (почти как если бы представление карты было изображением). Как лучше всего добиться этого, если я пытаюсь создать универсальное многоразовое представление?
Это то, что у меня пока получилось.
Подвиды никогда не выстраиваются в линию и не масштабируются должным образом. Я новичок в Swift UI и до сих пор не знаю лучших практик, поэтому буду рад любому вкладу.
struct CardView: View {
var body: some View {
GeometryReader { geometry in
let width = geometry.size.width
let height = geometry.size.height
let headerHeight = height / 12
let cardPadding = width * 0.03
VStack(spacing: height * 0.02) {
CardHeaderView()
.frame(maxHeight: headerHeight)
CardImageView()
CardContentView()
Spacer()
}
.padding(.all, cardPadding)
.background(
Image("texture")
.resizable()
.scaledToFill()
.clipped()
)
.border(Color.red, width: width * 0.01)
.clipped()
}
.aspectRatio(2.5 / 3.5, contentMode: .fit)
}
}
// one subview as an example
struct hpView: View {
@State private var isMovingAround = false
var body: some View {
GeometryReader { geometry in
let width = geometry.size.width
let height = geometry.size.height
let hpWidth = width * 1
let hpHeight = height * 1
ZStack {
RoundedRectangle(cornerRadius: height / 2)
.frame(width: hpWidth, height: hpHeight)
.foregroundStyle(.indigo.gradient)
RoundedRectangle(cornerRadius: height / 2)
.strokeBorder(style: StrokeStyle(lineWidth: 4, lineCap: .round, lineJoin: .round, dash: [40, 400], dashPhase: isMovingAround ? 220 : -220))
.frame(width: hpWidth, height: hpHeight)
.foregroundStyle(
LinearGradient(gradient: Gradient(colors: [.indigo, .white, .purple, .mint, .white, .orange, .indigo]), startPoint: .trailing, endPoint: .leading)
)
.shadow(radius: 2)
HStack(spacing: 2) {
Text("HP")
.foregroundStyle(Color.white)
.font(.system(size: hpHeight - 10, weight: .bold))
.italic()
ZStack {
Circle()
.fill(
RadialGradient(
gradient: Gradient(colors: [.white, .blue]),
center: .center,
startRadius: -10,
endRadius: 20
)
)
.frame(width: height - 4, height: height - 4)
Text("96")
.foregroundStyle(Color.white)
.font(.system(size: hpHeight * 0.5, weight: .bold))
}
}
}
.onAppear {
withAnimation(.linear.speed(0.1).repeatForever(autoreverses: false)) {
isMovingAround.toggle()
}
}
}
}
}
Подробнее здесь: [url]https://stackoverflow.com/questions/79339131/create-reusable-compositional-swift-ui-view-that-scales[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия