Für alle anderen, die hier landen:
Um festzustellen, ob ein UIView irgendwo auf dem Bildschirm angezeigt wird, anstatt zu überprüfen superview != nil, sollten Sie überprüfen, ob window != nil. Im ersteren Fall ist es möglich, dass die Ansicht eine Übersicht hat, die Übersicht jedoch nicht auf dem Bildschirm angezeigt wird:
if (view.window != nil) {
// do stuff
}
Natürlich sollten Sie auch prüfen, ob es eine ist hiddenoder ob es eine hat alpha > 0.
NSTimerWenn Sie nicht möchten, dass Sie ausgeführt werden, während die Ansicht nicht sichtbar ist, sollten Sie diese Ansichten nach Möglichkeit manuell ausblenden und den Timer anhalten lassen, wenn die Ansicht ausgeblendet ist. Ich bin mir jedoch überhaupt nicht sicher, was Sie tun.
.windowaktualisieren, dh die Antwort, die überprüft (von walkbrad), da die Antwort, die überprüft wird.superview(von mahboudz), technisch nicht korrekt ist und Fehler für mich verursacht hat .