Я создаю фитнес-приложение, в котором пользователь выбирает одну из программ из списка, и когда он нажимает на выбранную программу, при воспроизведении видео появляется новый вид (на видео есть таймер обратного отсчета).
I построил экран, используя NavigationView / NavigationLink, каждый из которых имеет свой «вид назначения» со своими собственными параметрами.
let sets: [TrainingSet]
init() {
self.sets = [set1,set2,set3]
}
var body: some View {
NavigationView {
VStack {
ForEach(self.sets) { set in
NavigationLink(destination: ExerciseVideoView(items: set.items).navigationBarBackButtonHidden(true)) {
VStack {
Image("group-\(set.image)")
.resizable()
.renderingMode(.original)
.frame(height: 200, alignment: .leading)
.overlay(
Text(set.purpose)
.font(.largeTitle)
.fontWeight(.semibold)
.foregroundColor(.white)
)
Color.blue
.frame(maxWidth: .infinity)
.overlay(
Text(set.purpose)
.foregroundColor(.white)
)
}
}
}
}
}
}
1) Я заметил, что при построении родительского представления все целевые представления ( ExerciseVideoView ) выполняются даже до нажатия пользователем соответствующей кнопки. Мои таймеры обратного отсчета начинаются в фоновом режиме. Я должен был увидеть, как они запускаются, когда пользователь нажимает на NavigationLink и новое представление «выполняется». Это правильное поведение? Могу ли я сделать пункт назначения «выполненным / запущенным», когда они отображаются?
2) Вторая проблема - я хочу показать изображения с синими кнопками под каждым из них (я помещаю их оба в контейнер VStack). Но когда я запускаю свое приложение, отображаются только изображения, а прямоугольники «Color.blue» не видны. Это почему? Как сделать их видимыми?