我想要实现的是:拥有几个UILabel并能够按顺序高亮显示它们,我的意思是我想更改它们的textColor、fontSize和位置。因此,我成功地编写了一个演示,它采用一组UIView并按顺序突出显示它们(更改其背景颜色)。
阅读了Andrew Fuchs对问题的回答后,您知道执行几个连续UIView动画的最佳方式吗?引用了多个没有嵌套块的UIView动画
然而,当我在我的代码中用UILabel代替UIView时,一切都结束了,它们没有动画,变化会立即发生。有人能告诉我我做错了什么吗?UILabel是UIView的子类,所以我希望在UIView中工作的属性在UILabel中工作。在Apple的“iOS视图编程指南-动画”中,声明background Color可以动画。所以我回到了基础,编写了一些测试代码,发现对于UIView,我可以愉快地对其background Color、alpha和中心位置进行动画处理。而UILabel alpha属性和中心位置可以成功地进行动画处理,但background Color和text Color不能。请参阅:GitHub AnimateSequally
- (void)viewDidLoad {
[super viewDidLoad];
duration = 2.0;
yOffset = 100.0;
normalColor = [UIColor lightGrayColor];
highlightedColor = [UIColor greenColor];
view1StartPoint = view1.center;
view2StartPoint = view2.center;
lable1StartPoint = label1.center;
lable2StartPoint = label2.center;
[self resetEverything:nil];
}
- (IBAction)animateViews:(id)sender
{
[UIView animateWithDuration:duration
animations:^{
[view1 setBackgroundColor:highlightedColor]; // animates correctly
// [view1 setAlpha:0.2]; // animates correctly
CGPoint p = view1.center;
p.y -= yOffset;
view1.center = p; // animates correctly
}
completion:^(BOOL finished){
[UIView animateWithDuration:duration
animations:^{
[view2 setBackgroundColor:highlightedColor];
// [view2 setAlpha:0.2];
CGPoint p = view2.center;
p.y -= yOffset;
view2.center = p; // animates correctly
}
completion:nil];
}
];
}
- (IBAction)animateLabelsSimple:(id)sender // does NOT works sequentially
{
[UIView animateWithDuration:duration
animations:^{
[label1 setBackgroundColor:highlightedColor]; // changes instantly
// [label1 setTextColor:[UIColor orangeColor]]; // changes instantly
// [label1 setAlpha:0.2]; // animates correctly
CGPoint p = label1.center;
p.y -= yOffset;
label1.center = p; // animates correctly
}
completion:^(BOOL finished){
[UIView animateWithDuration:duration
animations:^{
[label2 setBackgroundColor:highlightedColor];
// [label2 setTextColor:[UIColor orangeColor]];
// [label2 setAlpha:0.2];
CGPoint p = label2.center;
p.y -= yOffset;
label2.center = p;
}
completion:nil];
}
];
}
- (IBAction)resetEverything:(id)sender
{
[view1 setBackgroundColor:normalColor];
[view2 setBackgroundColor:normalColor];
[label1 setBackgroundColor:normalColor];
[label2 setBackgroundColor:normalColor];
[view1 setAlpha:1.0];
[view2 setAlpha:1.0];
[label1 setAlpha:1.0];
[label2 setAlpha:1.0];
[label1 setTextColor:[UIColor blackColor]];
[label2 setTextColor:[UIColor blackColor]];
view1.center = view1StartPoint;
view2.center = view2StartPoint;
label1.center = lable1StartPoint;
label2.center = lable2StartPoint;
}
我查看了GitHub Chameleon项目,并了解了UIView类方法“animateWithDuration”可能是如何实现的:
+ (void)animateWithDuration:(NSTimeInterval)duration delay:(NSTimeInterval)delay options:(UIViewAnimationOptions)options animations:(void (^)(void))animations completion:(void (^)(BOOL finished))completion
{
[self _beginAnimationsWithOptions:options | UIViewAnimationOptionTransitionNone];
[self setAnimationDuration:duration];
[self setAnimationDelay:delay];
[self _setAnimationCompletionBlock:completion];
animations();
[self commitAnimations];
}
那么,我必须将UILabel子类化并重写animateWithDuration方法吗?或者最好的方法是什么?
你可以试试这个https://stackoverflow.com/a/20892927/4030971用动画改变uilabel颜色。上面你已经实现了这个,但是需要一些changes.also你可以试试这个
[UIView animateWithDuration:duration animations:^{
[view1 setBackgroundColor:highlightedColor];
[view1 setAlpha:0.2];
[label setAlpha:0.0];
CGPoint p = view1.center;
p.y -= yOffset;
view1.center = p;
}completion:^(BOOL finished){
if(finished){
[label setBackgroundColor:[UIColor redColor]];
[UIView animateWithDuration:duration animations:^{
[view2 setBackgroundColor:highlightedColor];
[view2 setAlpha:0.2];
[label setAlpha:1.0];
CGPoint p = view2.center;
p.y -= yOffset;
view2.center = p;
}completion:nil];
}];
可以在标签的alpha为0时编写标签颜色更改代码,之后可以通过使alpha为1来设置标签动画。颜色更改代码将在检查“如果完成”之后和“下一个动画”开始块之前。
我在动画制作方法上有问题 我已经为GoogleMap创建了自己的CalloutBubble 在我的视图控制器中,我创建属性 然后,如果我尝试用任何方法创建calloutView,所有这些都可以很好地处理动画,但如果我用Google map方法返回视图 我的动画会立即在calloutView中运行,也会立即调用completion,然后再次调用runningLabel方法,因此它不会像必须的那样工作
我想安排一系列动画,在屏幕上动画介绍文字。最后一个动画在完成时,应该触发运行游戏的游戏勾号逻辑。 出于某种原因,一切都在立即发生。有人能解释为什么会发生这种情况吗?或者有更好的选择吗?
标准的块非常适合需要单个动画效果的动画,即调整大小和/或移动。 是否有一种方法可以使动画渐进,使动画开始缓慢,并随着其进展而提高速度? 我可以尝试嵌套的
我想这样做:https://storage.googleapis.com/spec-host/mio-staging/mio-design/1563837804615/assets/1XlKhaQFU9aS84ACmF-EDjVKDgI4pPldv/02-overflowmenu.mp4 我想挤压一个“ViewGroup”,正如你在视频中看到的。与此同时,我想淡出ViewGroup中的内容在其原始
我想在我正在写的一个应用程序中取得效果,也许你能帮我。 视图层次结构在这一点上相当复杂,所以为了简单起见,让我们假设我有一个UILabel,其Alpha值设置为0。目前,我正在使用一个UILongPressGestureRecognitor,它在几秒钟后调用一个方法来更新UILabel的文本,并执行一个UIView动画块来很好地显示它(在1秒的时间内将Alpha设置回1——淡入)。 该块在新更新的
我不知道如何在iOS7中设置NSLayoutConstraint动画持续时间。这是我的代码: