setProgress ist nicht mehr zu aktualisieren UIProgressView seit iOS 5
Habe ich ein wenig Mühe mit einem Fortschrittsbalken seit iOS 5 kam. Der code unten funktioniert wurde, bevor iOS 5 aber mit iOS 5 die Statusleiste wird nicht mehr angezeigt die neuen Fortschritte, die sich innerhalb einer Schleife.
Der code soll, wie folgt zu arbeiten:
- Erstellen der Fortschrittsbalken (funktioniert)
- In einem hintergrund-Prozess: einrichten einer ersten Fortschritte von 0,25 (funktioniert)
- In der gleichen hintergrund-Prozess: Aktualisieren Sie den Fortschritt zwar werde durch die Schleife (arbeitete in iOS 4).
Hier ist der code für die bar init:
//create a progress bar
UIProgressView *progressBar = [[UIProgressView alloc] initWithFrame:CGRectMake(coverSizeX*0.25, coverSizeY - 34.0, coverSizeX*0.5, 9.0)];
progressBar.progress = 0.0;
progressBar.progressViewStyle = UIProgressViewStyleBar;
und in einem anderen thread es stellt einen Ausgangspunkt für die Fortschritte auf 0,25:
//set an initial progress
[progressBar setProgress: 0.25];
wenig später ist die Aktualisierung über den Fortschritt innerhalb einer Schleife zur Anzeige der download-Fortschritt:
//within a for-loop:
NSNumber *counterPercentage;
for ( pageDownload = 1; pageDownload < pagesToDownload; pageDownload++ ) {
counterPercentage = [[NSNumber alloc] initWithFloat: (float)pageDownload /(float)((float)pagesToDownload)];
[progressBar setProgress: [counterPercentage floatValue]];
[progressBar performSelectorOnMainThread:@selector(setNeedsDisplay) withObject:nil waitUntilDone:YES];
}
... aber der Fortschritt ist nicht auf dem Bildschirm angezeigt, die Statusleiste wird am stuck die erste 0.25 Fortschritte, die festgelegt wurde.
Gab es irgendwelche änderungen mit dem iOS 5 release könnte es gebrochen?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich habe gesehen, eine Menge Fragen wie diese seit der iOS 5 wechseln, und ich bin mir nicht sicher, warum es ist ein problem nur in iOS 5. Aber vor allem, weil ich bin mir nicht sicher, warum es wasn ' T ein problem vor.
In Ihrem code, den Sie anrufen
[progressBar setProgress: [counterPercentage floatValue]];
von einem hintergrund-thread. Dies ist ein UI-call und sollte nicht gemacht werden, aus einem hintergrund-thread. Auch Sie rufensetNeedsDisplay
die nicht notwendig zum aktualisieren derprogressBar
da einUIProgressView
weiß, wie das display selbst. iOS 5 scheint gemacht zu haben, die die Anforderungen für die Aktualisierung der Benutzeroberfläche, strengere, aber nur bis zu dem Punkt, was sind best practices sowieso.In meinem Auge, das sieht wie eine perfekte Verwendung für Blöcke. Mit Hilfe von Bausteinen Ihre for-Schleife geschrieben werden kann, auf diese Weise:
Funktioniert es in iOS 5 und der einfachste Weg dazu ist hier:
.h-Datei:
.m-Datei:
Und wo es heißt, 0.3, können Sie einen beliebigen Wert, den Sie möchten (innerhalb von 0 bis 1)