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