Задержка при изменении градиента на UIButton - PullRequest
1 голос
/ 19 мая 2011

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

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

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

Код здесь :

Цель кода - создать кнопки, подобные кнопке входа в систему, показанную здесь: enter image description here

Ответы [ 3 ]

2 голосов
/ 19 мая 2011

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

-(void)setHighlighted:(BOOL)highlighted
{
    [super setHighlighted:highlighted];
    [self updateControlState];
}
0 голосов
/ 19 мая 2011

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

[CATransaction begin];
[CATransaction disableActions];
[gradientLayerSelected setHidden:FALSE];
[CATransaction commit];
0 голосов
/ 19 мая 2011

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

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

[bar setProgress:float]

так:

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

Надеюсь, это поможет.

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