2017-01-15 5 views
0

Salutations,Wie Sie sich richtig NSTimer verwenden, um eine automatische Diashow

Erlauben Sie mir zu schaffen, dies zu Vorrede, die meine Suchanfragen wahrscheinlich falsch formuliert worden sein kann, wie ich bestimmte andere bin versucht zu tun, noch, Ich kann es nicht finden. Ich habe verschiedene Wege untersucht, aber keiner hat wirklich funktioniert.

Also mein aktueller Code ist wie folgt:

while true { 
    currentPicture += 1; //Yes I know that ; is not needed, i come from Java so I      find it comforting. 
    showPico(); //function which shows an image from my array of images, this function handles out of bounds by reseting currentPic to 0 or 4. 
    sleep(2); 
} 

Nun mein Problem das ist, wenn ich meine Auto-Taste getroffen, die dort über meinen Code befindet, meine app natürlich gefriert. Das ist normal, da ich davon ausgehe, dass sleep() den Hauptthread aufruft und einfach alles aussetzt, bis es fertig ist zu schlafen. Allerdings sehe ich es das Bild überhaupt nicht aktualisieren. Also, was ist der beste Weg, um eine Art Diashow zu erstellen.

Das Array von Bildern ist wie folgt definiert, für diejenigen fragen:

var pictureArray = ["1.jpg", "2.jpg", "3.jpg", "4.jpg", "5.jpg"]; //I know, highly original names. 

Randbemerkung: Mein Wissen über swift/iOS ist jetzt eine Gesamtsumme von 4 Tagen.

+0

Je nachdem, was Sie sich am wohlsten fühlen, und was die größte Menge an Bildern, die Sie in der Diashow erwarten sind, sollten Sie schauen in Scrollview/Auflistungsansicht CollectionView zum Beispiel, machen Sie eine Zelle zum Vollbild der Ansicht und weisen Sie ihr eine imageView zu, deaktivieren scrolling/userInteraction und scrollen dann nach einer gewissen Zeit zum nächsten indexPath. Es würde eine Menge sein, in speziell zu lernen, aber einen Timer einzurichten und zu lernen, wie man manuell eine Sammlung scrollen kann, wird leicht zu finden sein auf SO – JustinM

Antwort

1

Sie wahrscheinlich so etwas wie dies in Ihrer View-Controller möchten:

var timer: Timer! 

func viewDidLoad() { 
    super.viewDidLoad() 
    timer = Timer.scheduledTimer(timeInterval: 0.1, 
           target: self, 
           selector: #selector(self.updateTime), 
           userInfo: nil, 
           repeats: true) 
} 


func updateTime() { 
    print("whatever is here happens every 0.1 seconds") 
} 

func viewWillDisappear(animated: Bool) { 
    super.viewWillDisappear(animated) 
    timer.invalidate() 
} 
+0

Ich werde diesen Code einen Wirbel bald geben, was ist der Zweck der viewWillDisappear? Ich nehme an, dass es mit glatter Animation zu tun hat, obwohl ich nirgends in der viewDidLoad() -Methode irgendwo aufgerufen werde, oder fehlt mir etwas? – SomeStudent

+0

Dies sind "Lebenszyklus" -Methoden. Sie werden ausgelöst, wenn bestimmte Dinge passieren. In diesem Fall wird der Code in viewDidLoad aufgerufen, wenn der View-Controller geladen wird. Wenn die Ansicht aus unserer Sicht verschwindet, wird der Zeitgeber ungültig gemacht, um sicherzustellen, dass er nicht im Hintergrund weiterläuft. Der #Selector (self.updateTime) weist den Timer an, die updateTime() -Methode alle 0,1 Sekunden entsprechend der Funktion scheduleTimer zu verwenden. Überprüfen Sie dies: https://developer.apple.com/library/content/featuredarticles/ViewControllerPGforiPhoneOS/index.html#//apple_ref/doc/uid/TP40007457 –

+0

Gotcha, macht Sinn. Funktioniert sehr gut, danke. Und nur ein kurzes Follow-up, was wäre der beste Weg, um die Ausführung zu stoppen. Nehmen wir an, der Benutzer möchte die Bildschirmpräsentation mit den Tasten next/prev manuell durchgehen lassen? Prost! – SomeStudent

Verwandte Themen