UIBarButtonItem:在动画期间更改标题字体颜色

时间:2013-05-02 15:35:09

标签: ios animation uibutton custom-controls uibarbuttonitem

我使用自定义UIButton初始化了一个UIBarButtonItem,并将其设置为导航控制器中的rightBarButtonItem。

UIBarButtonItem *rightBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:rightNavigationButton];//rightNavigationButton is the custom UIButton I set up before

self.navigationItem.rightBarButtonItem = rightBarButtonItem;

通过UIButton的外观代理我设置了UIControlStates的颜色(正常/禁用/突出显示)。 UIBarButtonItem的行为符合预期。

当按下“保存按钮”时,我想突出显示UIBarButtonItem,以提供已保存某些内容的视觉反馈。 我想要做的是通过在保存动画期间更改标题的颜色来模拟UIBarButtonItem的突出显示,因为它似乎不能以编程方式触发突出显示动画(或设置所选属性)({{3 }})

所以我做的是设置一个IBOutlet属性,将它连接到InterfaceBuilder中的UIBarButtonItem并为其分配rightBarButtonItem。当按下“保存按钮”时,我正在尝试这个:

    [UIView animateWithDuration:0.5f
                      delay:0.0f
                    options:UIViewAnimationCurveEaseOut
                 animations:^{
                           //some other animation code here
                          [self.barButtonItemOutlet setTitleTextAttributes:[NSDictionary            dictionaryWithObjectsAndKeys:
                          [UIFont fontWithName:FONT_ICON size:FONTSIZE],UITextAttributeFont,
                          HIGHLIGHT_COLOUR,UITextAttributeTextColor,
                          [NSValue valueWithUIOffset:UIOffsetMake(0, 0)],UITextAttributeTextShadowOffset,
                          [UIColor colorWithRed:0 green:0 blue:0 alpha:0.0],UITextAttributeTextShadowColor,nil]
                          forState:UIControlStateNormal];

                 }
                 completion:nil
   ];

但根本没有任何事情发生。我得到它以某种方式工作的唯一方法是禁用/启用它。但由于禁用和突出显示的颜色应该不同,我需要这两种状态,这不是一个真正的选择。

感谢任何帮助!

1 个答案:

答案 0 :(得分:1)

嗯,UIView类的docs说:UIView类的以下属性是可动画的:

  @property frame  
  @property bounds  
  @property center  
  @property transform  
  @property alpha  
  @property backgroundColor  
  @property contentStretch  

所以颜色不能动画,对不起。

编辑:我的回答涉及UIView动画,但也有CALayer动画更灵活。

我找到this link,如果您使用CALayer动画,也可以为颜色设置动画。让我调查一下。
编辑: 好吧,我在核心动画上找到了this very useful book chapter。不幸的是,它似乎无法解决您的问题,因为UIBarButtonItem的标题颜色似乎不是可以设置动画的CALayer的属性。对不起,我退出了......