Как уничтожить таймер при переходе на другой экранIOS

Программируем под IOS
Ответить
Anonymous
 Как уничтожить таймер при переходе на другой экран

Сообщение Anonymous »

Использование UiKitView для отображения кода быстрого пользовательского интерфейса в приложении Flutter.

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

import SwiftUI

struct Snowflake: Identifiable {
var id = UUID()
var x: Double
var y: Double
var scale: Double
var speed: Double
}

struct SnowFallAnimationView: View{
@State private var snowflakes: [Snowflake] = []
@State private var timer: Timer?

var body: some View {
ZStack {
LinearGradient(
gradient: Gradient(colors: [
.black,
.black
]), startPoint: .top, endPoint: UnitPoint.bottom
)
//.ignore safe area

if #available(iOS 15.0, *) {
Canvas { context, size in

for snowflake in snowflakes {
context.draw(Text("❄️").font(.system(size: 10 * snowflake.scale)), at: CGPoint(x: snowflake.x * size.width, y: snowflake.y * size.height))
}
}
} else {
// Fallback on earlier versions
}
}.onAppear() {
startSnowFall()
}
}
func startSnowFall() {
for _ in 0..= 1.2 {
snowflakes[i].y = -0.2
snowflakes[i].x = Double.random(in: 0...1)
}
}
})
}
}

Взлетающая сторона.

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

class NativeViewExample extends StatefulWidget {
const NativeViewExample({super.key});

@override
State createState() => _NativeViewExampleState();
}

class _NativeViewExampleState extends State {
@override
Widget build(BuildContext context) {
const String viewType = '
';
// Pass parameters to the platform side.
final Map creationParams = {};
return Stack(
children: [
UiKitView(
viewType: viewType,
layoutDirection: TextDirection.ltr,
creationParams: creationParams,
creationParamsCodec: const StandardMessageCodec(),
),
Align(
alignment: Alignment.bottomCenter,
child: Padding(
padding: const EdgeInsets.all(16.0),
child: ElevatedButton(
onPressed: () {
// Flutter button functionality
print("Flutter button pressed");
},
child: Text('Flutter Button'),
),
),
),
],
);
}
}
Проблема в следующем: таймер создается каждый раз, когда SnowFallAnimationView появляется на экране. Это приводит к одновременной работе нескольких таймеров, что приводит к ускорению снежинок с течением времени. (Это происходит при переходе на другой экран и возврате).
Есть ли способ остановить таймер (в быстром коде) при переходе на другой экран. Или просто работайте с уже созданным таймером. (предотвратить создание нескольких таймеров).

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

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

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

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

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

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