Loop Fino condizione in cui, iPhone
-
20-09-2019 - |
Domanda
Ho un problema qui ...
Dopo un tasto viene premuto voglio un ciclo di correre fino a raggiungere una condizione:
- (IBAction)buttonclick1 ...
if ((value2ForIf - valueForIf) >= 3) { ...
Vorrei un ciclo a funzionare fino a
((value2ForIf - valueForIf) >= 3)
e quindi eseguire il codice associato con l'istruzione IF.
Quello che sto puntando a raggiungere è il programma di mantenere il controllo se la dichiarazione di cui sopra è vero, prima di continuare con il codice. In cima a questo v'è un else sotto la SE, anche se non so se questo influenzerà un loop.
Non sono sicuro del formato del circuito necessari qui e tutto quello che ho provato ha causato errori. Qualsiasi aiuto sarebbe molto apprezzato.
Stu
Soluzione
- (IBAction)buttonclick1 ...
{
//You may also want to consider adding a visual cue that work is being done if it might
//take a while until the condition that you're testing becomes valid.
//If so, uncomment and implement the following:
/*
//Adds a progress view, note that it must be declared outside this method, to be able to
//access it later, in order for it to be removed
progView = [[MyProgressView alloc] initWithFrame: CGRectMake(...)];
[self.view addSubview: progView];
[progView release];
//Disables the button to prevent further touches until the condition is met,
//and makes it a bit transparent, to visually indicate its disabled state
thisButton.enabled = NO;
thisButton.alpha = 0.5;
*/
//Starts a timer to perform the verification
NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval: 0.2
target: self
selector: @selector(buttonAction:)
userInfo: nil
repeats: YES];
}
- (void)buttonAction: (NSTimer *) timer
{
if ((value2ForIf - valueForIf) >= 3)
{
//If the condition is met, the timer is invalidated, in order not to fire again
[timer invalidate];
//If you considered adding a visual cue, now it's time to remove it
/*
//Remove the progress view
[progView removeFromSuperview];
//Enable the button and make it opaque, to signal that
//it's again ready to be touched
thisButton.enabled = YES;
thisButton.alpha = 1.0;
*/
//The rest of your code here:
}
}
Altri suggerimenti
Invece di eseguire un ciclo stretto, che potrebbe bloccare l'esecuzione della tua applicazione a meno che correre su un altro thread, si potrebbe usare un NSTimer per chiamare un metodo in un intervallo di tempo di tua scelta e controllare le condizioni in quel metodo. Se la condizione è soddisfatta, si può invalidare la timer e continuare.
Da quello che lei ha dichiarato, quello che vuoi è un ciclo while
while( (value2ForIf - valueForIf) < 3 ) { ...Code Here... }
Questo verrà eseguito il codice nelle parentesi finché la differenza di valori è inferiore a 3, il che significa che durerà fino loro differenza è 3 o più. Ma, come ha detto Jasarien. Questa è una cattiva idea dal momento che sarà il blocco del programma. Se i valori vengono aggiornati dal codice stesso che è bene. Ma se sono in fase di aggiornamento da parte di alcuni UI da parte dell'utente, il vostro ciclo while bloccherà l'interfaccia utente e non consentire all'utente di nulla di ingresso.