一、位置动画
UIView *viewA = [[UIView alloc]initWithFrame:CGRectMake(100, 100, 100, 100)];
[self.view addSubview:viewA];
viewA.backgroundColor = [UIColor orangeColor];
[UIView animateWithDuration:2 animations:^{
viewA.frame = CGRectMake(viewA.frame.origin.x, 400, viewA.bounds.size.width, viewA.bounds.size.height);
}];
二、透明度、颜色动画
//颜色动画
[UIView animateWithDuration:2 animations:^{
viewA.backgroundColor = [UIColor greenColor];
}];
//透明度
[UIView animateWithDuration:2 animations:^{
viewA.alpha = 0.3;
}];
三、缩放动画
[UIView animateWithDuration:4 animations:^{
viewA.transform = CGAffineTransformMakeScale(2, 3);
}];
CGAffineTransformMakeScale(CGFloat sx, CGFloat sy)
两个参数,代表 x 和 y 方向缩放倍数
CGAffineTransformScale(CGAffineTransform t, CGFloat sx, CGFloat sy);
三个参数,第一个为要进行变换的矩阵
区别:
CGAffineTransformMakeScale
是对单位矩阵进行缩放。
CGAffineTransformScale
是对第一个参数的矩阵进行缩放
比如已经对一个 view 缩放 0.5,还想在这个基础上继续缩放 0.5,那么就把这个 view.transform
作为第一个参数传到 CGAffineTransformScale
里面,缩放之后的 view 则变为 0.25(CGAffineTransformScale(view.transofrm,0.5,0.5))
。如果用 CGAffineTransformMakeScale
方法,那么这个 view 仍旧是缩放 0.5(CGAffineTransformMakeScale(0.5,0.5))
。
四、旋转动画
[UIView animateWithDuration:4 animations:^{
viewA.transform = CGAffineTransformRotate(viewA.transform, M_PI);
}];
五、重复动画、延时动画
[UIView animateWithDuration:2 delay:0.35 options:UIViewAnimationOptionRepeat|UIViewAnimationOptionAutoreverse animations:^{
viewA.transform = CGAffineTransformRotate(viewA.transform, M_PI);
} completion:^(BOOL finished) {
}];
duration
: 动画时长
delay
: 决定了动画在延迟多久之后执行
options
:用来决定动画的展示方式
animations
:转化成动画表示的代码
completion
:动画结束后执行的代码块
options
类型
UIViewAnimationOptionLayoutSubviews:动画过程中保证子视图跟随运动
UIViewAnimationOptionAllowUserInteraction:动画过程中允许用户交互。
UIViewAnimationOptionBeginFromCurrentState:所有视图从当前状态开始运行。
UIViewAnimationOptionRepeat:重复运行动画。
UIViewAnimationOptionAutoreverse :动画运行到结束点后仍然以动画方式回到初始点。
UIViewAnimationOptionOverrideInheritedDuration:忽略嵌套动画时间设置。
UIViewAnimationOptionOverrideInheritedCurve:忽略嵌套动画速度设置。
UIViewAnimationOptionAllowAnimatedContent:动画过程中重绘视图(注意:仅仅适用于转场动画)。
UIViewAnimationOptionShowHideTransitionViews:视图切换时直接隐藏旧视图、显示新视图,而不是将旧视图从父视图移除(仅仅适用于转场动画
UIViewAnimationOptionOverrideInheritedOptions :不继承父动画设置或动画类型。
UIViewAnimationOptionTransitionNone:没有动画效果。
UIViewAnimationOptionTransitionFlipFromLeft :从左侧翻转效果。
UIViewAnimationOptionTransitionFlipFromRight:从右侧翻转效果。
UIViewAnimationOptionTransitionCurlUp:向后翻页的动画过渡效果。
UIViewAnimationOptionTransitionCurlDown :向前翻页的动画过渡效果。
UIViewAnimationOptionTransitionCrossDissolve:旧视图溶解消失显示下一个新视图的效果。
UIViewAnimationOptionTransitionFlipFromTop :从上方翻转效果。
UIViewAnimationOptionTransitionFlipFromBottom:从底部翻转效果。
UIViewAnimationOptionCurveEaseInOut:动画效果先缓后逐渐加速。
UIViewAnimationOptionCurveEaseIn :动画效果逐渐变慢。
UIViewAnimationOptionCurveEaseOut:动画效果逐渐加速。
UIViewAnimationOptionCurveLinear :动画效果匀速执行(默认)。
六、注意
在使用 Masonry 库的时候进行 [UIView animateWithDuration:2 animations:^{}];
函数做动画效果时,必须要在该函数内部加上 [目标控件.superview layoutIfNeeded]
这条语句,否则会无法生成动画效果。
因为设置的约束并不会立即生效,所以我们需要用 layoutIfNeeded
来对其强制更新,再首次约束和让其开始动画的时候都得更新一次,否则动画的效果会很奇怪
和普通的方法实现差不多,重点只是修改约束后调用 [view.superview layoutIfNeeded];
而已
用 Masonry 库做动画时,一定要使用 mas_updateConstraints
的更新约束
[view mas_makeConstraints:^(MASConstraintMaker *make) {
make.top.mas_equalTo(400);
make.left.mas_equalTo(100);
make.size.mas_equalTo(CGSizeMake(100, 100));
}];
[view.superview layoutIfNeeded];//如果其约束还没有生成的时候需要动画的话,就请先强制刷新后才写动画,否则所有没生成的约束会直接跑动画
[UIView animateWithDuration:3 animations:^{
[view mas_updateConstraints:^(MASConstraintMaker *make) {
make.left.mas_equalTo(200);
}];
[view.superview layoutIfNeeded];//强制绘制
}];
网友评论