2014-09-08 1 views
0

Я хочу анимировать переход между нормальным и выделенным состоянием UIButton.Переход анимации между нормальным и выделенным состоянием UIButton

Я положил 2 изображения в качестве фона из двух состояний в IB и написал следующий код для TouchUpInside события:

- (void) animate { 
    [UIView transitionWithView:self.myButton 
         duration:2 
         options:UIViewAnimationOptionTransitionCrossDissolve 
        animations:^{ self.myButton.highlighted = YES; } 
        completion:^(BOOL finished) {[UIView transitionWithView:self.myButton 
                    duration:2 
                    options:UIViewAnimationOptionTransitionCrossDissolve 
                   animations:^{ self.myButton.highlighted = NO; } 
                   completion:nil];} 
    ]; 
} 

Таким образом анимация не начала регулярно и, в частности, если я быстро нажмите на кнопка.

Я обнаружил, что, предшествуя описанному выше методу, следующее (связанное с UIButton вместо предыдущего) анимация работает без проблем ... но я не понимаю причину!

Может кто-нибудь объяснить, что именно происходит, когда я добавляю этот последний метод?

- (void) firstThis { 

    [self performSelector: @selector(animate) withObject: nil afterDelay: 0]; 
} 

Спасибо, Corrado

ответ

1

performSelector всегда расписания ваш метод будет выполняться позже (в этом случае на основной), даже если установлена ​​задержка = 0. Таким образом, в вашем случае система получает шанс правильно запускать/останавливать анимацию и/или заканчивать другие вещи, например, например: автоматическое выделение кнопки, которая происходит из-за событий touch-down. Система запускает анимацию после того, как закончила собственную анимацию подсветки кнопки. Прямой вызов мешает этому.

+0

Спасибо, теперь это имеет смысл! – Corrado

0

Лучше всего не использовать UIButton вообще (поскольку вы пытаетесь избежать некоторого унаследованного поведения). Вы можете использовать несколько разных подходов. Вместо этого я бы подумал об использовании UIImageView и добавлении распознавателя жестов к его фрейму в коде. Затем вы можете анимировать выделение, как вам нравится, потому что система не пытается сделать это за вас.

+0

Спасибо ... Я попробую ваше предложение – Corrado