作者 嘿o大远 关注

2017.03.23 17:02* 字数 402 阅读 47评论 1喜欢 3

今天总结一下UIView动画就是 UiView动画是基于高层API封装进行封装的,对UIView的属性进行修改时候所产生的动画.

基本动画

下面两种方法是最常用的两种.

+ (void)animateWithDuration:(NSTimeInterval)duration animations:(void (^)(void))animations

animations 修改View属性的Block 下面是支持修改的属性

@property frame
@property bounds
@property center
@property transform
@property alpha
@property backgroundColor
@property contentStretch
+ (void)animateWithDuration:(NSTimeInterval)duration animations:(void (^)(void))animations completion:(void (^ __nullable)(BOOL finished))completion

completion 动画完成block
BOOL finished 表示动画是否完成

继续

+ (void)animateWithDuration:(NSTimeInterval)durationdelay:(NSTimeInterval)delay options:(UIViewAnimationOptions)options animations:(void (^)(void))animations completion:(void (^ __nullable)(BOOL finished))completion

delay 延迟执行时间
options 动画效果枚举 ,下面是全部枚举的说明

动画效果相关

UIViewAnimationOptionLayoutSubviews            //提交动画的时候布局子控件,表示子控件将和父控件一同动画。UIViewAnimationOptionAllowUserInteraction      //动画时允许用户交流,比如触摸UIViewAnimationOptionBeginFromCurrentState     //从当前状态开始动画UIViewAnimationOptionRepeat                    //动画无限重复UIViewAnimationOptionAutoreverse               //执行动画回路,前提是设置动画无限重复UIViewAnimationOptionOverrideInheritedDuration //忽略外层动画嵌套的执行时间UIViewAnimationOptionOverrideInheritedCurve    //忽略外层动画嵌套的时间变化曲线UIViewAnimationOptionAllowAnimatedContent      //通过改变属性和重绘实现动画效果,如果key没有提交动画将使用快照UIViewAnimationOptionShowHideTransitionViews   //用显隐的方式替代添加移除图层的动画效果UIViewAnimationOptionOverrideInheritedOptions  //忽略嵌套继承的选项

时间函数曲线相关

UIViewAnimationOptionCurveEaseInOut            //时间曲线函数,由慢到快UIViewAnimationOptionCurveEaseIn               //时间曲线函数,由慢到特别快UIViewAnimationOptionCurveEaseOut              //时间曲线函数,由快到慢UIViewAnimationOptionCurveLinear               //时间曲线函数,匀速

转场动画相关的

UIViewAnimationOptionTransitionNone            //无转场动画UIViewAnimationOptionTransitionFlipFromLeft    //转场从左翻转UIViewAnimationOptionTransitionFlipFromRight   //转场从右翻转UIViewAnimationOptionTransitionCurlUp          //上卷转场UIViewAnimationOptionTransitionCurlDown        //下卷转场UIViewAnimationOptionTransitionCrossDissolve   //转场交叉消失UIViewAnimationOptionTransitionFlipFromTop     //转场从上翻转UIViewAnimationOptionTransitionFlipFromBottom  //转场从下翻转

弹簧动画

+ (void)animateWithDuration:(NSTimeInterval)duration delay:(NSTimeInterval)delay usingSpringWithDamping:(CGFloat)dampingRatio initialSpringVelocity:(CGFloat)velocity options:(UIViewAnimationOptions)optionsanimations:(void (^)(void))animations completion:(void (^ __nullable)(BOOL finished))completion

dampingRatio 弹簧的阻尼 如果为1动画则平稳减速动画没有振荡。 这里值为 0~1
velocity 弹簧的速率。数值越小,动力越小,弹簧的拉伸幅度就越小。反之相反。比如:总共的动画运行距离是200 pt,你希望每秒 100pt 时,值为 0.5;

例子

[UIView animateWithDuration:2delay:2usingSpringWithDamping:.5initialSpringVelocity:.5options:UIViewAnimationOptionRepeatanimations:^{view.center = self.view.center;
} completion:^(BOOL finished) {
}];

过渡动画

+ (void)transitionWithView:(UIView *)view duration:(NSTimeInterval)duration options:(UIViewAnimationOptions)optionsanimations:(void (^ __nullable)(void))animations completion:(void (^ __nullable)(BOOL finished))completion

view 参与转换的视图

例子

UIView *view = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 100, 100)];
[self.view addSubview:view];
view.center = self.view.center;
view.backgroundColor = [UIColor redColor];UIView *view_1 = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 50, 50)];
view_1.backgroundColor = [UIColor yellowColor];[UIView transitionWithView:view duration:3      options:UIViewAnimationOptionTransitionCurlUp animations:^{[view addSubview:view_1];
} completion:^(BOOL finished) {
}];

继续

+ (void)transitionFromView:(UIView *)fromViewtoView:(UIView *)toView duration:(NSTimeInterval)duration options:(UIViewAnimationOptions)options completion:(void (^ __nullable)(BOOL finished))completion

fromView 一开始的视图
toView 转换后的视图

例子

UIView *baseView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 100, 100)];
[self.view addSubview:baseView];
baseView.center = self.view.center;UIView *view = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 100, 100)];
[baseView addSubview:view];
view.backgroundColor = [UIColor redColor];UIView *view_1 = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 100, 100)];
view_1.backgroundColor = [UIColor yellowColor];[UIView transitionFromView:viewtoView:view_1 duration:2 options:UIViewAnimationOptionTransitionFlipFromLeft completion:^(BOOL finished) {
}];

关键帧动画

+ (void)animateKeyframesWithDuration:(NSTimeInterval)durationdelay:(NSTimeInterval)delay options:(UIViewKeyframeAnimationOptions)options animations:(void (^)(void))animationscompletion:(void (^ __nullable)(BOOL finished))completion+ (void)addKeyframeWithRelativeStartTime:(double)frameStartTime relativeDuration:(double)frameDuration animations:(void (^)(void))animations

duration 总持续时间
UIViewKeyframeAnimationOptions options 枚举 下面说明
frameStartTime 相对开始时间
frameDuration 相对持续时间

例子

UIView *view = [[UIView alloc] initWithFrame:CGRectMake(20, 20, 50, 50)];
view.backgroundColor = [UIColor orangeColor];
[self.view addSubview:view];
[UIView animateKeyframesWithDuration:3 delay:3 options:UIViewKeyframeAnimationOptionRepeat animations:^{[UIView addKeyframeWithRelativeStartTime:0 relativeDuration:.3 animations:^{view.frame = CGRectMake(20, 100, 100, 100);}];[UIView addKeyframeWithRelativeStartTime:.3 relativeDuration:.6 animations:^{view.frame = CGRectMake(60, 100, 80, 80);}];[UIView addKeyframeWithRelativeStartTime:.6 relativeDuration:1 animations:^{view.frame = CGRectMake(20, 20, 50, 50);}];} completion:^(BOOL finished) {
}];

UIViewKeyframeAnimationOptions

    UIViewKeyframeAnimationOptionLayoutSubviews        //提交动画的时候布局子控件,表示子控件将和父控件一同动画。UIViewKeyframeAnimationOptionAllowUserInteraction  //动画时允许用户交流,比如触摸    UIViewKeyframeAnimationOptionBeginFromCurrentState     //从当前状态开始动画UIViewKeyframeAnimationOptionRepeat                //动画无限重复UIViewKeyframeAnimationOptionAutoreverse           //执行动画回路,前提是设置动画无限重复UIViewKeyframeAnimationOptionOverrideInheritedDuration //忽略外层动画嵌套的执行时间UIViewKeyframeAnimationOptionOverrideInheritedOptions  //忽略嵌套继承的选项关键帧动画独有UIViewKeyframeAnimationOptionCalculationModeLinear     //选择使用一个简单的线性插值计算的时候关键帧之间的值。UIViewKeyframeAnimationOptionCalculationModeDiscrete   //选择不插入关键帧之间的值,而是直接跳到每个新的关键帧的值。UIViewKeyframeAnimationOptionCalculationModePaced      //选择计算中间帧数值算法使用一个简单的节奏。这个选项的结果在一个均匀的动画。UIViewKeyframeAnimationOptionCalculationModeCubic      //选择计算中间帧使用默认卡特莫尔罗花键,通过关键帧的值。你不能调整该算法的参数。 这个动画好像会更圆滑一些..UIViewKeyframeAnimationOptionCalculationModeCubicPaced //选择计算中间帧使用立方计划而忽略的时间属性动画。相反,时间参数计算隐式地给动画一个恒定的速度。

剩下两个操作

+ (void)performSystemAnimation:(UISystemAnimation)animation onViews:(NSArray<UIView *> *)viewsoptions:(UIViewAnimationOptions)options animations:(void (^ __nullable)(void))parallelAnimations completion:(void (^ __nullable)(BOOL finished))completion+ (void)performWithoutAnimation:(void (NS_NOESCAPE ^)(void))actionsWithoutAnimation

1.删除视图上的子视图 animation这个枚举只有一个删除值...
views操作的view 这会让那个视图变模糊、收缩和褪色, 之后再给它发送 removeFromSuperview 方法。
2.在动画block中不执行动画的代码.

例子

    UIView *view = [[UIView alloc] initWithFrame:CGRectMake(20, 20, 50, 50)];view.backgroundColor = [UIColor orangeColor];UIView *view_1 = [[UIView alloc] initWithFrame:CGRectMake(10, 10, 20, 20)];[view addSubview:view_1];view_1.backgroundColor = [UIColor redColor];[self.view addSubview:view];[UIView animateKeyframesWithDuration:3 delay:3 options:UIViewKeyframeAnimationOptionRepeat|UIViewKeyframeAnimationOptionAutoreverse animations:^{view.frame = CGRectMake(100, 100, 50, 50);[UIView performWithoutAnimation:^{view.backgroundColor = [UIColor blueColor];}];} completion:^(BOOL finished) {}];[UIView performSystemAnimation:UISystemAnimationDelete onViews:@[view_1] options:0 animations:^{view_1.alpha = 0;} completion:^(BOOL finished) {}];

结束

就先写到这里吧 如果有用的话请点个喜欢..

 iOS

© 著作权归作者所有
举报文章

关注嘿o大远

写了 591 字,被 5 人关注,获得了 4 个喜欢

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!

赞赏支持

UIView Animation相关推荐

  1. UIView Animation效果

    之前受某人影响以为一连串的UIView Animation 只能这么写: 在某个animation 设置delegate ,然后在 delegate 函数中再调用另一个函数. 今天偷闲决定看 iPho ...

  2. UIView及其分类的属性方法定义

    UIView是iOS开发中最熟悉的控件,不是因为它用得多,而是很多UI控件都是继承它的,了解它的分类方法是很有必要的. UIView其实是由多个分类构成,主要有如下几个分类: UIView :基本属性 ...

  3. ios uiview动画_iOS UIView动画

    ios uiview动画 In this tutorial, we'll be animating our UI Views in various ways in the iOS Applicatio ...

  4. ios UIView全部API解读

    /********* UIView是iOS系统界面元素的基础,所有的界面元素都是集成自它.它本身完全是由CoreAnimation来实现的.它真正的绘图部分,是一个叫CALayer(Core Anim ...

  5. IOS UIView详解

    文章目录 IOS UIView详解 1.官方类分析 2. UIView 常用的属性 2.1 UIView的圆角加阴影效果的实现 2.2 UIView 属性 2.2.1 UIView 几何属性 2.2. ...

  6. UIView动画初探

    UIView常用属性 @interface UIView(UIViewGeometry) @property(nonatomic,getter=isExclusiveTouch) BOOL exclu ...

  7. iphone开发笔记

    1.uiimage图片拉伸 - (void)stretchBackgroundImage {//UIImage *originalImage = [[self backgroundImageForSt ...

  8. 周报_2012第51周(2012/12/16-2012/12/22)

    2012.12.18 Windows Phone 墓碑机制(多任务) Launching和Closing方法在通常情况下使用:例如用返回键退出,或者从程序列表中启动. Activated和Deacti ...

  9. 一个 bug / Masonry的引入

    支持iOS 6/6 Plus的时候碰到这样一个问题: 塞在UITableViewCell里的UIPageControl居中设置失败了,偏右 刚刚设置时下断点查看(6Plus模拟器): <Gray ...

最新文章

  1. LeetCode简单题之两个数组的交集 II
  2. jfinal里使用ajax,Jfinal解决AJAX的跨域请求
  3. 【转载】探索式测试基础系列—生活进阶曲
  4. Android中的资源复用小技巧
  5. P2770 航空路线问题(网络流)
  6. 微信小程序-音频播放-wx.createInnerAudioContext() 每次都是重复播放同一条录音
  7. 元宇宙“性骚扰”现象频出,Meta推出“个人结界”能保护好女玩家吗?
  8. 深入理解字符,字符集,gbk,utf8
  9. 买苹果---动态规划
  10. java反射机制面试_java反射机制面试题及答案整理,java反射面试题
  11. 慧都与数据库厂商Devart进一步提升合作层次
  12. java happen-before_Java happen-before规则
  13. 【Java】实现多线程计算阶乘(完整版)
  14. Speedoffice(excel)如何利用SUMIF函数求和
  15. mysqli _ fetch _ assoc()函数出现警告的原因
  16. hdoj 4288coder cf 85d Sum of Medians
  17. python 写文件的疑问
  18. 丰巢快递柜收费,究竟挑动了我们哪根神经?
  19. h5网站模板_80个懒人模板网站,我全部整理在这里了
  20. LeetCode(498):对角线遍历 Diagonal Traverse(Java)

热门文章

  1. Platform Builder 5下WinCE 5.0目录结构
  2. 你是如何快捷、高效获取新知识的?
  3. c语言宏嵌套和展开规则
  4. grep 正则表达式及选项以及注意
  5. linux系统proc目录进程信息详解
  6. C++拾取——使用stl标准库实现排序算法及评测
  7. 设计模式之外观模式(Facade)摘录
  8. matlab画多个垂直的线段,新手求助,图形最后多出一条垂直线
  9. php mysql execute语法_PHP PDOStatement::execute讲解
  10. phpstorm安装_PHPstorm设置浏览器打开代码