一、位置动画
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];//逼迫绘制}]; |