CAKeyframeAnimation для backgroundColor … вызывает сбой

#core-animation #background-color #cakeyframeanimation

#основная анимация #background-color #cakeyframeanimation

Вопрос:

Я перечисляю массив с помощью этого кода, и он выходит из строя. Я думаю, это потому, что я неправильно переношу цвета, но как мне их передать?

     CAKeyframeAnimation *iAnimation = [CAKeyframeAnimation animationWithKeyPath:@"backgroundColor"];
    NSArray *iTimes;
    NSArray *iValues;
    NSInteger iTag = iButton.tag;

    iTimes = [NSArray arrayWithObjects:
              [NSNumber numberWithFloat:(iTimeBlock * iTag)],
              [NSNumber numberWithFloat:(iTimeBlock * iTag   1)],
              [NSNumber numberWithFloat:iTimeBlock * (iTag   2)], nil];

    iValues = [NSArray arrayWithObjects:
               iButton.backgroundColor,
               iButton.color, // my subclass has this property
                       iButton.backgroundColor, nil];

    [iAnimation setKeyTimes:iTimes];
    [iAnimation setValues:iValues];
    [iAnimation setDuration:21.0];
    [iButton.layer addAnimation:iAnimation
                         forKey:@"FlashColor"];
  

Ответ №1:

     iValues = [NSArray arrayWithObjects:
               (id)iButton.backgroundColor.CGColor,
               (id)iButton.color.CGColor,
               (id)iButton.backgroundColor.CGColor,
               nil];
  

Ответ №2:

Чтобы получить цвет UIButton, вы можете сделать вот так :

[iButton backgroundColor];

вам, вероятно, это не нужно :

[NSValue valueWithBytes:iButton.backgroundColor objCType:@encode (UIColor)],

Комментарии:

1. получение объекта uicolor не является проблемой, я указал, передав объект так, как вы описываете. (отредактировано, чтобы показать первый метод)

2. У вас есть какие-нибудь красные ошибки? Может быть, попробуйте это: [NSValue valueWithBytes:[iButton backgroundColor] objCType:@encode (UIColor)]