【问题标题】:Animate the enabling of a UIBarButtonItem?动画 UIBarButtonItem 的启用?
【发布时间】:2009-11-18 03:24:24
【问题描述】:

有没有一种动画方式来启用或禁用按钮?我尝试了以下但没有成功。我现在猜测 enabled 属性不能像 opacity 那样动画 - 但我希望我错了。

    [UIView beginAnimations:nil context:nil];
    [UIView setAnimationDuration:1.0f];
    theButton.enabled = YES;
    [UIView setAnimationDelegate:self];
    [UIView commitAnimations];

我不敢相信没有setEnabled:(BOOL)enabled animated:(BOOL)animated 方法。

【问题讨论】:

    标签: iphone animation button core-animation uibarbuttonitem


    【解决方案1】:

    这其实很简单。 UIView.transitionWithView 可以拍摄任何视图的快照,并从快照交叉融合到视图的新状态。您可以使用该功能为许多更改设置动画,包括enabled

    只需使用视图控制器的视图作为目标视图,指定TransitionCrossDissolve,然后像往常一样设置动画。

    UIView.transitionWithView(self.view,
        duration: 0.5,
        options: UIViewAnimationOptions.TransitionCrossDissolve,
        animations: { () -> Void in
            self.someButton.enabled = !self.someButton.enabled
    }, completion:nil)
    

    【讨论】:

    • 如果您要更改导航项的栏按钮项之一,请尝试将navigationController.navigationBar 作为视图传递,而不是self.view
    【解决方案2】:

    动画属性(通过 UIView beginAnimations:context:)有:frame、bounds、center、transform、alpha(来自 Apple 文档)。

    所以你必须确定你的动画到底是什么(就颜色/alpha/transform 动画而言)并创建手动动画(也许你必须使用 CAAnimation 而不是 UIView beginAnimations:context:)

    【讨论】:

    • 这些属性都不适用于不继承自 UIView 的 UIBarButtonItem。
    • 你是对的。但 UIBarButtonItem 可以包含可动画的 customView。
    【解决方案3】:

    您可以将按钮的启用/禁用分解为两个重叠图像之间的不透明度变化,每个图像都处于一种或另一种状态(即使其看起来像淡入/淡出)。在动画完成处理程序中,您可以执行实际的启用/禁用切换。

    【讨论】:

      【解决方案4】:

      这是一个想法:)

      在您的动画块中,从视图中移除按钮,然后以禁用状态再次添加它。你可以在这里指定你想要什么样的动画..

      【讨论】:

      • 我不知道可以使用什么方法从视图中删除 UIBarButtonItem。另外,这不会导致按钮作为动画的一部分消失吗?
      【解决方案5】:

      设置:self.buttonSetEvent.customView.alpha = 0.2;

      试试这个

          CGContextRef context = UIGraphicsGetCurrentContext();
      [UIView beginAnimations:nil context:context];
      [UIView setAnimationCurve:UIViewAnimationCurveEaseIn];
      [UIView setAnimationDuration:0.15];
      [UIView setAnimationRepeatCount:2];
      [UIView setAnimationRepeatAutoreverses:YES];
      
      self.buttonSetEvent.customView.alpha = 1;
      
      [UIView setAnimationDelegate:self];
      [UIView commitAnimations];
      

      【讨论】:

      • 这仅适用于使用自定义视图创建“self.buttonSetEvent”(以及该变量名称来自哪里?)。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-12
      相关资源
      最近更新 更多