2011-05-19 2 views
1

Я помещаю два CAGradientLayers на UIButton, а затем меняя слои в зависимости от того, подсвечена ли кнопка или нет (пальцем вниз).Задержка при изменении градиента на UIButton

Проблема в том, что для изменения градиента требуется небольшая часть секунды. Сначала он исчез, я исправил это, очистив все анимации на слое.

Оба градиента создаются заранее, а на touchDown градиент подсветки получает значение скрытой переменной FALSE, которая, как я полагаю, должна быть мгновенной? Что я пропустил? Есть ли лучший способ достичь этого?

Code is here:

Целью кода является создание кнопки, как кнопка Войти показал здесь: enter image description here

ответ

2

Try вызова updateControlState из setHighlighted метода UIButton вместо данного touchUp: и touchDown. setHighlighted следует получать автоматически, когда происходят события касания. Я сделал кнопку с CAGradientLayers, как раньше, и это может быть быстрее, чем то, что вы получаете сейчас.

-(void)setHighlighted:(BOOL)highlighted 
{ 
    [super setHighlighted:highlighted]; 
    [self updateControlState]; 
} 
+0

Это сделало. Танки! –

0

Проблема может быть связано с тем, что все рисование делается в основном потоке , Если основной поток занят другим источником, рисунок не будет обновляться до тех пор, пока основной поток не вызовет функцию рисования еще раз.

У меня возникла эта проблема, когда я пытался обновить файл UIProgressBar при анализе XML-файла. Очевидно, NSXMLParser работает по основному потоку, поэтому мой progressBar не обновил свой прогресс, пока синтаксический анализатор не закончил синтаксический анализ. Я должен был назвать

[bar setProgress:float] 

так:

[bar performSelectorOnMainThread:@selector(setProgress:) withObject:float]; 

Надеется, что это помогает.

+0

Хорошо, но я ничего не делаю в основной теме, когда пытаюсь изменить градиент. –

0

Некоторые свойства CALayer имеют неявную анимацию. hidden - один из них. Вы должны сделать это, чтобы подавить неявные анимации -

[CATransaction begin]; 
[CATransaction disableActions]; 
[gradientLayerSelected setHidden:FALSE]; 
[CATransaction commit]; 
+0

Пробовал, что и это не сработало. Еще есть задержка :( –

Смежные вопросы