UiView исчезнет, ​​если не трогать - PullRequest
0 голосов
/ 09 сентября 2010

Я бы хотел воспроизвести это поведение в своем приложении для iPad.У меня есть подпредставление, которое содержит четыре настраиваемые кнопки.

  • Представление имеет альфа-значение 0,0
  • У меня есть другая настраиваемая кнопка вне описанного выше представления, которая всегда видна.
  • Когда пользователь дотрагивается до видимой кнопки, появляется представление, оживляющее его альфа до 1,0, показывая остальные 4 кнопки.
  • Теперь я хотел бы запустить таймер, который запускает представление fadeOut через 2 секунды
  • Когда и если пользователь взаимодействует (скажем, touchDown или что-то еще) с кнопками, таймеры должны быть сброшены.

Другими словами, представление может исчезнуть только тогда, когда никто не касается кнопки внутри него..

Можете ли вы помочь мне с этим.

Мне удалось изучить основы анимации UIView, но я не знаю, как их поставить в очередь.В моем iPad установлена ​​iOS 3.2.2.установлены.Извините за плохое объяснение, но это мое первое приложение для iPad и мой первый проект obj-c.

1 Ответ

1 голос
/ 10 сентября 2010

Для этого вы бы сохранили NSTimer переменную экземпляра.Как только ваше представление станет полностью видимым, что вы можете заметить, например, реализовав замирание в делегате анимации, вы инициализируете его следующим образом:

_fadeTimer = [NSTimer scheduledTimerWithTimeInterval:2.0 target:self selector:@selector(fade:) userInfo:nil repeats:NO];

Убедитесь, что _fadeTimer является переменной экземпляра, вам необходимо иметь возможностьсбросить его.Затем реализуйте метод затухания:

- (void)fade:(NSTimer *)aTimer {
    // Forget about timer!
    _fadeTimer = nil;

    [UIView beginAnimations:nil context:NULL];
    // fade here
    [UIView commitAnimations];
}

При каждом взаимодействии с пользователем вы просто вызываете метод, который задерживает затухание.Для этого удалите и заново создайте таймер.Или измените дату запуска:

- (void)delayFade {
    [_fadeTimer setFireDate: [NSDate dateWithTimeIntervalSinceNow: 2.0]];
}

PS: Нет необходимости явно сохранять таймер.Он сохраняется в runloop, пока не сработает.После обратного вызова он будет выпущен в любом случае.Просто убедитесь, что вы всегда сбрасываете переменную на nil, иначе ваше приложение может потерпеть крах при неправильном доступе.Если вам нужно удалить время до его запуска, вызовите метод invalidate.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...