En mi aplicación tengo un UIProgressView que necesita aumentar en +0.1 cada 5 minutos. El método para hacerlo, pero sé que tengo un problema, porque me gustaría que la vista de progreso de los cálculos de cinco minutos, incluso si mi aplicación está cerrada, dependa de tiempo real (reloj de iPhone) y no cuando mi aplicación esté abierta. . Lo explicaré
- Abro mi aplicación y empiezo a contar los minutos.
- Luego cierro mi aplicación
- Abro mi aplicación después de 10 minutos
- el progreso de mi vista debe tener un valor de +0.2 (0.1 cada 5 minutos)
Sé que para hacer eso debería usar NSDate pero no puedo implementarlo de la manera correcta, ¿alguien podría ayudarme con un ejemplo para comprender mejor cómo implementar esto?
Gracias a todos
En pocas palabras, lo que busco es que el aumento de uiprogressview debe obtenerse desde el reloj de los minutos del iPhone ... esto tiene que suceder si la aplicación está abierta o cerrada ... solo un minuto más llega uiprogressview debe cambiar. En resumen, esto debería ser una recuperación de energía de un usuario
2 respuestas
Creo que deberías:
- Almacene la fecha de inicio en alguna variable:
NSDate *startDate = [NSDate new];
Guardar la fecha de inicio real en NSUserDefaults:
[[NSUserDefaults standardDefaults] setObject: startDate forKey: @"MyKey"];
- Luego, cuando su aplicación se active, obtenga la fecha de NSUserDefaults, calcule el intervalo de tiempo entre la fecha guardada y la fecha real:
NSTimeInterval secondsBetween = [[NSDate new] timeIntervalSinceDate: savedDate];
- Ahora puede dividir el resultado por su intervalo de progreso (supongo que en
ViewWillAppear
):
progress = secondsBetween/(5*60) * 0.1
Si desea actualizar su progreso después de cada unidad de tiempo cuando su ViewController está activo, debe usar NSTimer:
[NSTimer scheduledTimerWithTimeInterval: (5 * 60)
target:self
selector:@selector(refreshProgressMethod)
userInfo:nil
repeats:YES];
Al iniciar la aplicación o cuando desee que comience el progreso, almacene la hora actual:
let startTime = NSDate()
Luego, al actualizar (puede mediante la configuración del temporizador para disparar cada pocos minutos, o en viewDidAppear ()):
let timeDelta = Date().timeIntervalSince(startTime)
progressBar.progress = timeDelta/(60 * 5) * 0.1
Actualización: Parece que OP necesita saber cómo persistir el tiempo de inicio del progreso entre la finalización de la aplicación y el nuevo lanzamiento. Al igual que la otra respuesta, puede usar UserDefaults y verificar si ya existe una hora de inicio. Si existe, úselo; de lo contrario, cree una nueva entrada como esta:
let userDefaultKey = "startTime"
var startTime = UserDefaults.standard.object(forKey: userDefaultKey)
if (startTime == nil)
{
startTime = Date()
UserDefaults.standard.set(startTime, forKey: userDefaultKey)
}
Nuevas preguntas
ios
iOS es el sistema operativo móvil que se ejecuta en el iPhone, iPod touch y iPad de Apple. Use esta etiqueta [ios] para preguntas relacionadas con la programación en la plataforma iOS. Use las etiquetas relacionadas [Objective-C] y [Swift] para problemas específicos de esos lenguajes de programación.