animateWithDuration:<#(NSTimeInterval)#> delay:<#(NSTimeInterval)#> options:<#(UIViewAnimationOptions)#> animations:<#^(void)animations#> completion:<#^(BOOL finished)completion#>函数
不是全部修改属性的操做放到animations
代码块中都是变成动画实现的 —— 无论你怎么修改一个视图的tag
,或者是delegate
。所以,可实现动画的属性一定会致使视图的从新渲染。
这些能够生成动画的属性大体能够分红这么三类:坐标尺寸
、视图显示
、形态变化
动画
坐标尺寸
:ui
center
属性从新计算frame
。建议经过这个属性修改尺寸center
跟bounds
属性bounds
从新计算frame
视图显示:
url
形态变化
:spa
transform:修改这个属性能够实现旋转、形变、移动、翻转等动画效果,其经过矩阵运算的方式来实现,所以更增强大code
上面咱们使用到的动画方法中有一个重要的参数options
,它能让你高度的自定义动画效果。下面展现这个参数类型的值集合,你能够经过结合不一样的参数来实现本身的动画:orm
Repeating:图片
UIViewAnimationOptionRepeat //动画循环执行 UIViewAnimationOptionAutoreverse //动画在执行完毕后会反方向再执行一次
UIViewAnimationOptionRepeat
参数不只是让动画循环播放,而且还致使了completion
的回调永远没法执行
Easing:
UIViewAnimationOptionRepeatcompletion
UIViewAnimationOptionCurveEaseInOut //先加速后减速,默认(先加速,后减速) UIViewAnimationOptionCurveEaseIn //由慢到快(逐渐加速) UIViewAnimationOptionCurveEaseOut //由快到慢(速度领先,而后减速) UIViewAnimationOptionCurveLinear //匀速(匀速运动)
Transitioning:
在视图、图片切换的时候,咱们还能经过传入下面的这些参数来实现一些特殊的动画效果:使用方法
UIView transitionWithView:<#(nonnull UIView *)#> duration:<#(NSTimeInterval)#>
options:<#(UIViewAnimationOptions)#> animations:<#^(void)animations#> completion:<#^(BOOL finished)completion#>
UIViewAnimationOptionTransitionNone //没有效果,默认 UIViewAnimationOptionTransitionFlipFromLeft //从左翻转效果 UIViewAnimationOptionTransitionFlipFromRight //从右翻转效果 UIViewAnimationOptionTransitionCurlUp //从上往下翻页 UIViewAnimationOptionTransitionCurlDown //从下往上翻页 UIViewAnimationOptionTransitionCrossDissolve //旧视图溶解过渡到下一个视图 UIViewAnimationOptionTransitionFlipFromTop //从上翻转效果 UIViewAnimationOptionTransitionFlipFromBottom //从上翻转效果
弹簧效果:
animateWithDuration:(NSTimeInterval) delay:<#(NSTimeInterval)#> usingSpringWithDamping:<#(CGFloat)#> initialSpringVelocity:<#(CGFloat)#>
options:<#(UIViewAnimationOptions)#> animations:<#^(void)animations#> completion:<#^(BOOL finished)completion#>
transform动画:ip
transform
是一个很是重要的属性,它在矩阵变换的层面上改变视图的显示效果,完成旋转、形变、平移等等操做。在它被修改的同时,视图的frame也会被真实改变。有两个数据类型用来表示transform
,分别是CGAffineTransform
和CATransform3D
。前者做用于UIView
,后者为layer
层次的变换类型。基于后者能够实现更增强大的功能,但咱们须要先掌握CGAffineTransform
类型的使用.ci
在开始使用transform
实现你的动画以前,先介绍几个经常使用的函数:
/// 链接两个变换效果 返回的t = t1 * t2 CGAffineTransformConcat(CGAffineTransform t1, CGAffineTransform t2) /// 矩阵初始值 [ 1 0 0 1 0 0 ] CGAffineTransformIdentity /// 自定义矩阵变换,须要掌握矩阵变换的知识才知道怎么用。参照上面推荐的原理连接 CGAffineTransformMake(CGFloat a, CGFloat b, CGFloat c, CGFloat d, CGFloat tx, CGFloat ty) /// 旋转视图。传入参数为 角度 * (M_PI / 180)。等同于 CGAffineTransformRotate(self.transform, angle) CGAffineTransformMakeRotation(CGFloat angle) 括号里是旋转度数 CGAffineTransformRotate(CGAffineTransform t, CGFloat angle) /// 缩放视图。等同于CGAffineTransformScale(self.transform, sx, sy) CGAffineTransformMakeScale(CGFloat sx, CGFloat sy) 宽高缩放比例(能够为负数 当于对称过去) CGAffineTransformScale(CGAffineTransform t, CGFloat sx, CGFloat sy) /// 位移视图。等同于CGAffineTransformTranslate(self.transform, tx, ty) CGAffineTransformMakeTranslation(CGFloat tx, CGFloat ty) 是相对于原位置右移 下移的参数 CGAffineTransformTranslate(CGAffineTransform t, CGFloat tx, CGFloat ty)