Продолжительность анимации UIView - PullRequest
0 голосов
/ 27 февраля 2012

У меня есть UIView, и я хочу изменить его цвет фона. Это хорошо работает, используя метод UIView beginAnimation:context:. Однако анимация «длится» около 1 секунды или около того. Я хочу, чтобы это длилось 5 секунд. Это код, который я использую:

- (void)updateSky:(NSString *)time {
    [UIView beginAnimations: @"backgroundUpdate" context:nil];
    [UIView setAnimationDuration: 5.0];

    gradient.colors = [NSArray arrayWithObjects: (id)[[UIColor colorWithRed:0x63/255.0f green:0xA9/255.0f blue:0xFF/255.0f alpha:1.0] CGColor],
                                                 (id)[[UIColor colorWithRed:0x8C/255.0f green:0xBF/255.0f blue:0xFF/255.0f alpha:1.0] CGColor], nil];

    if(time == @"night") {
        gradient.colors = [NSArray arrayWithObjects: (id)[[UIColor colorWithRed:0x1E/255.0f green:0x1E/255.0f blue:0x1E/255.0f alpha:1.0] CGColor],
                                                     (id)[[UIColor colorWithRed:0x2C/255.0f green:0x4C/255.0f blue:0x72/255.0f alpha:1.0] CGColor], nil];
    }

    [UIView commitAnimations];
}

gradient определяется следующим образом:

CAGradientLayer *gradient;

Я что-то не так делаю?

1 Ответ

1 голос
/ 27 февраля 2012

Способ анимирования установки цвета фона UIView с использованием анимации вида - установить его свойство backgroundColor.Вы, кажется, не делаете это.Что это за вещь gradient и каково ее свойство colors?Проблема здесь заключается в том, что вы используете анимацию UIView, но colors не является анимируемым свойством UIView, так что это не имеет смысла.Вам нужно предоставить больше кода, чтобы показать, что вы действительно делаете.Например, если это неявная анимация слоя, вы бы использовали +[CATransaction setAnimationDuration:] для установки продолжительности.

(Кроме того, вся эта структура beginAnimations / commitAnimations, хотя и не совсем устарела, фактически находится на разделочной доске. Это не имеет отношения к вашему вопросу, но было бы неплохо выйти из нее, если вы можете, просто в принципе. Вы должны использовать animateWithDuration:delay:options:animations:completion:, или неявную анимацию слоя, или явную базовую анимацию.)

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