Динамическое обнаружение изменения положения подпредставления в SwiftUIIOS

Программируем под IOS
Ответить
Anonymous
 Динамическое обнаружение изменения положения подпредставления в SwiftUI

Сообщение Anonymous »

У меня есть следующий код, в котором я обновляю y-позицию прямоугольника с помощью таймера. Учитывая следующую иерархию представлений и без использования абсолютных позиций, как я могу определить, что, как только оно выходит за пределы lineView, оно является подпредставлением?
struct ColorView: View {
private let blockWidth = 40.0
private let blockHeight = 40.0
@State private var blockYPos = 0.0
private let timer = Timer.publish(every: 0.1, on: .main, in: .common).autoconnect()

var body: some View {
GeometryReader { geometry in

ZStack {
// position updated via timer
Rectangle()
.frame(width: blockWidth, height: blockHeight)
.position(x: geometry.size.width/2, y: blockYPos)

VStack {
HStack {
scribble
Spacer()
close
}
.font(.title)
.frame(height: 40)

palleteView

lineView

Spacer()

}
}
.background {
Color.yellow.ignoresSafeArea()
}
.onAppear {
blockYPos = geometry.size.height - blockHeight
}
.onReceive(timer) { _ in
blockYPos -= 5
}
}
}

private var lineView: some View {
Capsule()
.frame(height: 2)
.foregroundStyle(Color.red)
.padding(.horizontal)
}

private var close: some View {
Image(systemName: "xmark.circle.fill")
.padding(.trailing, 8)
}

private var scribble: some View {
Image(systemName: "scribble.variable")
.padding(.leading, 8)
}

private var palleteView: some View {
HStack(alignment: .center) {
Rectangle()
.fill(.green)
.frame(width: blockWidth, height: blockHeight)

Rectangle()
.fill(.blue)
.frame(width: blockWidth, height: blockHeight)

Rectangle()
.fill(.orange)
.frame(width: blockWidth, height: blockHeight)

Rectangle()
.fill(Color.indigo)
.frame(width: blockWidth, height: blockHeight)

Rectangle()
.fill(Color.mint)
.frame(width: blockWidth, height: blockHeight)
}
}
}


Подробнее здесь: https://stackoverflow.com/questions/793 ... in-swiftui
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «IOS»