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 alpha
和UIView 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 块动画不起作用的主要内容,如果未能解决你的问题,请参考以下文章