UIView 块动画不起作用

Posted

技术标签:

【中文标题】UIView 块动画不起作用【英文标题】:UIView block animation not working 【发布时间】:2015-10-26 16:30:12 【问题描述】:

我有一个自定义视图(绘制标注/气泡),我目前将其作为子视图添加到 UIImageView。它按预期工作,但我想用类似弹簧的效果为操作设置动画。我正在使用下面的代码,但它不起作用(块被执行但没有动画):

/* ViewController */    

UIImageView *iv = self.imageView;

ZGCBubbleView *bubbleView = [[ZGCBubbleView alloc] init];
bubbleView.hidden = YES;
[iv addSubview:bubbleView];

// UIView animation test
[UIView animateWithDuration:2.0
                      delay:0
     usingSpringWithDamping:0.5
      initialSpringVelocity:0.5
                    options:UIViewAnimationOptionAllowAnimatedContent & UIViewAnimationOptionLayoutSubviews
                 animations:^

                     bubbleView.hidden = NO;
                     [self.view layoutIfNeeded]; // tried this
                 
                 completion:nil];

我尝试为 hidden 属性和 alpha 属性设置动画,但结果相同。我也尝试过为 addSubview 方法设置动画,没有区别。我从一个更简单的动画开始作为概念证明,但这也不起作用。

上述代码在 (void)viewDidAppear:(BOOL) 动画循环期间调用的方法中执行。这与动画在主线程期间执行有什么关系吗?我已经读过一些类似的东西,但不确定。此外,我正在为 UIImageView 使用自动布局,但我认为在这种情况下这并不重要,因为动画被应用于 UIImageView 的自定义子视图。

任何帮助表示赞赏。

【问题讨论】:

您是否要在视图中淡入淡出?淡入淡出是否按照需要设置动画?或者您是否正在尝试为其他方面设置动画? 【参考方案1】:

更好地使用 alpha。

UIImageView *iv = self.imageView;

ZGCBubbleView *bubbleView = [[ZGCBubbleView alloc] init];
bubbleView.alpha = 0;
// bubbleView.hidden = YES;
[iv addSubview:bubbleView];

// UIView animation test
[UIView animateWithDuration:2.0
                  delay:0
 usingSpringWithDamping:0.5
  initialSpringVelocity:0.5
                options:UIViewAnimationOptionAllowAnimatedContent & UIViewAnimationOptionLayoutSubviews
             animations:^
                // bubbleView.hidden = NO;
                 bubbleView.alpha = 1;
                 //[self.view layoutIfNeeded]; // tried this
             
             completion:nil];

【讨论】:

如果使用alpha(就是这样)会更好,为什么这段代码也会动画hidden 是的。这没有道理。更新了代码。只添加了几行代码而没有编辑太多代码。 :P 谢谢大家,这很有效。我将@BhavukJain 标记为正确答案,因为动画 alpha 属性是允许动画工作的原因。出于某种原因,我认为为隐藏属性设置动画应该也可以,但它没有。 @Rob 查看UIView alphaUIView hidden 的文档。请注意文档对可动画属性的说明(或不说明)。 谢谢@rmaddy。我阅读了参考资料,但很确定我已经看到了使用 hidden 属性的动画代码。也许在不同的背景下。【参考方案2】:

试试这个。

UIButton *catchButton = (UIButton *)sender;

[UIView animateWithDuration:1.0 
                      delay:0.0
                    options:UIViewAnimationOptionCurveEaseInOut//UIViewAnimationOptionAutoreverse | UIViewAnimationOptionRepeat |
                 animations:^
                     catchButton.alpha = 0.4;
                     catchButton.enabled = NO;
                 
                 completion:NULL];

【讨论】:

您正在尝试为隐藏的视图设置动画。 你永远不会看到你的动画。试试我的答案。 没有区别。实际上, hidden 属性只是我尝试过动画的少数几个(我也尝试将子视图添加为动画块的一部分)。该块执行是因为我可以看到我的子视图,只是不是以动画方式。 能否提供示例代码让我直接观察

以上是关于UIView 块动画不起作用的主要内容,如果未能解决你的问题,请参考以下文章

UIView 动画不起作用

动画 UIView 宽度不起作用

当我将 UIView 动画放在不同类的 containerView 中时,为啥我的 UIView 动画不起作用?

为啥在添加视图后立即启动 UIView 动画不起作用?

通过动画调整 UIView 大小时约束不起作用

添加延迟动画时,UIView 动画不起作用