2016-07-20 4 views
0

Ich kann nicht finden, warum ein Segment programmatisch dauert etwa 2 Sekunden, um den View-Controller das erste Mal zu zeigen. Wenn ich zum View-Controller zurückkehre und versuche, das Segment erneut auszuführen, dauert es nicht lange, bis der View-Controller angezeigt wird. Diese View-Controller habe ich von einem modalen Übergang aus geöffnet.Swift - segue programmatisch dauert zwei Sekunden, um View Controller das erste Mal anzuzeigen

Ich mache so etwas wie dieses:

override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { 
    dispatch_async(dispatch_get_main_queue()) { 
     self.performSegueWithIdentifier("<segue identifier>", sender: indexPath) 
    } 
} 

Und für die UITableView ich die delaysContentTouches Option deaktiviert. Und es funktioniert immer noch nicht, es dauert nur etwa zwei Sekunden zu öffnen, aber nur das erste Mal.

Inzwischen habe ich eine NSTimer Daten von einem Webdienst abrufen, aber ich lese, dass NSTimer auf einem anderen Thread ausgeführt wird, so denke ich, das ist nicht das Problem.

Fehle ich etwas, damit das Display den View Controller schneller anzeigt?

+0

Überprüfen Sie, was Thread Sie sind eingeschaltet, wenn diese Methode aufgerufen wird. Du solltest mich schon auf dem Hauptthread haben, also brauchst du deinen GCD-Anruf nicht, was dich verlangsamen kann. – CodeBender

+0

Verwenden Sie benutzerdefinierte Schriftarten? Wird die Tastatur zum ersten Mal in Ihrer App angezeigt? Sehen Sie die gleiche Verzögerung, wenn Sie nicht unter dem xcode Debugger laufen? – Paulw11

+0

@ Paulw11 Ich benutze eine benutzerdefinierte Schriftart und es zeigt nicht die Tastatur zum ersten Mal. Ich habe festgestellt, dass die Verzögerung nur dann auftritt, wenn ich die App unter dem xcode Debugger laufe – pableiros

Antwort

0

NSTimer kann mit einem Hintergrund-Thread arbeiten, tut dies aber nicht unbedingt. Es hängt davon ab, wie Sie es instanziieren. Ein einfacher Wiederholungstimer verwendet normalerweise den RunLoop des Hauptthreads, der eng mit UI-Aktualisierungen verknüpft ist. Davon abgesehen bezweifle ich, dass Ihr Timer eine Verzögerung beim Anzeigen der Ansicht verursachen könnte. Es ist wahrscheinlicher, dass während der Einrichtung der Benutzeroberfläche eine schwere Verarbeitung ausgeführt wird.

die typischen Dinge, die solch eine einmalige Verzögerung induzieren konnten, sind: - Ein großes Bild auf der Ansicht (im Storyboard oder Nib) - firstResponder ein Textfeld geben, den die Tastatur auf dem Bildschirm zu zeigen, braucht (Die Bildschirmtastatur benötigt immer ein paar Sekunden, um das erste Mal zu erscheinen.) - Komplexe UI-Einschränkungen, die das automatische Layout mehrere Durchläufe durchlaufen lassen, um die Positionen und Größen von Unteransichten herauszufinden (aber das würde beim nächsten Mal wieder vorkommen) herum, es sei denn, Sie halten den View Controller am Leben und verwenden ihn erneut. - Wiederholtes erneutes Laden auf einem UITableView oder UICollectionView (dies kann passieren, wenn Sie versuchen, die Daten so anzuzeigen, wie sie kommen), aber dies würde auch bei nachfolgenden Aufrufen des Segments erneut auftreten, wenn Sie etwas zwischenspeichern

Verwandte Themen