Для всех, кто сюда попал:
Чтобы определить, находится ли где-нибудь на экране UIView, вместо проверки superview != nil
, лучше проверить, если window != nil
. В первом случае возможно, что представление имеет суперпредставление, но суперпредставление не отображается на экране:
if (view.window != nil) {
// do stuff
}
Конечно, вы должны также проверить, является ли он hidden
или имеет alpha > 0
.
Если вы не хотите, чтобы ваш NSTimer
работал, пока вид не виден, вы должны скрыть эти виды вручную, если это возможно, и отключить таймер, когда вид скрыт. Однако я совсем не уверен в том, что ты делаешь.