SwiftUI @State для изменения отображаемого изображения - PullRequest
0 голосов
/ 29 января 2020

У меня есть словарь, созданный для чтения в JSON данных, и я использую эти имена переменных для заполнения других представлений.

ТАК У меня есть var charFullDetail: charDetail

Это возвращает число переменные, но меня интересуют следующие: charFullDetail.cardFrontImage charFullDetail.cardBackImage

Они содержат строки, которые соответствуют изображению, сохраненному в каталоге активов.

My View затем использует эти переменные для отобразите изображение

Image(charFullDetail.cardFrontImage)

Это прекрасно работает.

Что я хочу сделать, это превратить изображение выше в нечто динамическое c, чтобы либо она нажата, либо нажата кнопка, и изображение отображает противоположное.

Поэтому, если отображается .cardFrontImage, и я нажимаю на изображение, я хочу, чтобы оно заменило изображение на Image(charFullDetail.cardBackImage

Я не могу заставить работать код, который делает это - я думал создать переменную @State и использовать ее в Image (), чтобы при изменении этой переменной Image () обновлялся.

Но если я сделаю @State var card = "charFullDetail.cardFrontImage"

, а затем попытаюсь использовать Image(card)

Это не удастся, так как не может найти картинку, так как она использует буквальную строку как строку, а чем ссылаться на значение этой переменной - если это имеет смысл.

В основном, как я могу заменить использование ссылки charFullDetail.cardFrontImage на переменную с сохранением состояния, но заставить его по-прежнему ссылаться на значение и не видеть его как String "charFullDetail.cardFrontImage"?

1 Ответ

0 голосов
/ 30 января 2020

Использование состояния в качестве строки работает для меня. Вы уверены, что с вашим активом что-то не так? Попробуйте эту игровую площадку, которая использует системные изображения, предоставленные SFSymbols, а затем добавьте свои собственные изображения:

import SwiftUI
import PlaygroundSupport


struct V: View {
  @State var imageName = "star"

  var body: some View {
    VStack {
      Image(systemName: self.imageName)
      Button("tap me") {
        self.imageName = self.imageName == "star" ? "star.fill" : "star"
      }
    }
  }
}

PlaygroundPage.current.setLiveView(UIHostingController(rootView: V()))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...