Для всіх, хто опиниться тут:
Щоб визначити, чи є UIView десь на екрані, а не перевіряти superview != nil, краще перевірити, чи є window != nil. У першому випадку можливо, що подання має суперперегляд, але що суперперегляд не відображається на екрані:
if (view.window != nil) {
// do stuff
}
Звичайно, вам слід також перевірити, чи є це, hiddenабо воно має alpha > 0.
Щодо того, що ви не хочете, щоб ваш NSTimerзапуск працював, поки подання не видно, вам слід приховати ці подання вручну, якщо це можливо, і зупинити таймер, коли вигляд приховано. Однак я зовсім не впевнений у тому, що ти робиш.
.window(за допомогою walkbrad), оскільки відповідь, яка перевіряє.superview(від mahboudz), технічно не правильна і викликала у мене помилки .