Можно ли анимировать изменения свойства просмотра без использования дополнительного @state var для каждого свойства?IOS

Программируем под IOS
Ответить
Anonymous
 Можно ли анимировать изменения свойства просмотра без использования дополнительного @state var для каждого свойства?

Сообщение Anonymous »

Я хотел бы создать пользовательское представление Swiftui, которое контролирует себя, если и как анимировано изменение свойства. Анимация изменения с использованием withanimation . Хотя AnimatedTextView использует модификатор .Transition , чтобы указать, как следует анимировать изменения текстового представления, эта анимация выполняется только в том случае, если ParentView запускает изменение в блоке withAnimation . < /p>

Код: Выделить всё

struct View {
@State private var text: String = "Hello, World!"

var body: some View {
AnimatedTextView(text: text)

Button("Tap me") {
withAnimation {
text += " +1" // control animation
}
}
}
}

struct AnimatedTextView: View {
let text: String

var body: some View {
Text(text)
.transition(.asymmetric(
insertion: .move(edge: .trailing).combined(with: .opacity),
removal: .move(edge: .leading).combined(with: .opacity)
))
.id(UUID())
}
}
Я смог переместить элемент управления в AnimatedTextView :

Код: Выделить всё

struct ParentView: View {
@State private var text: String = "Hello, World!"

var body: some View {
AnimatedTextView(text: text)

Button("Tap me") {
text += " +1" // no more withAnimation required
}
}
}

struct AnimatedTextView: View {
let text: String
@State private var displayedText: String = ""

var body: some View {
Text(displayedText)
.transition(.asymmetric(
insertion: .move(edge: .trailing).combined(with: .opacity),
removal: .move(edge: .leading).combined(with: .opacity)
))
.id(UUID())
.onAppear {
displayedText = text
}
.onChange(of: text) { _, newValue in
withAnimation {
displayedText = newValue
}
}
}
}
Вместо использования блока withanimation в ParentView теперь контролируется в модификаторе .onchange animatedTextView .
Хотя это работает нормально, для этого требуется дополнительный @state var для свойства, которое должно быть анимировано. В этом примере это не имеет большого значения, где AnimatedTextView имеет только одно свойство. Тем не менее, в реальных взглядах с множеством различных свойств, которые должны быть анимированы при изменениях, это может стать довольно неприятным очень быстро. < /P>
Так: это «правильный» подход для решения этой проблемы , или есть способ сделать это без «@state var» для каждого анимированного свойства?

Подробнее здесь: https://stackoverflow.com/questions/794 ... tional-sta
Ответить

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

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

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

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

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