iOS 动画Animation详解, UIView动画(UIView属性动画,UIViewTransition动画,UIView Block动画),CALayer动画(CABasicAnima, CAKeyframeAnimation, CATransition, CAAnimationGroup)
//
// FirstVC.m
// LessonAnimation
//
// Created by lanouhn on 14-9-17.
// Copyright (c) 2014年 vaercly@163.com 陈聪雷. All rights reserved.
//
#import "FirstVC.h"
@interface FirstVC ()
@end
@implementation FirstVC
/*
创建xib过程
1 创建xib(名字和类名相同)
2 文件拥有者为类名
3 和类的view连线
*/
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
// Custom initialization
}
return self;
}
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view from its nib.
}
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
//UIView属性动画
- (IBAction)pressPropertyAnimation:(id)sender {
//1 准备动画
//参数1: 动画的作用, 用来区分多个动画, 参数二: 传递参数用 nil:OC中使用 NULL:C语言使用
[UIView beginAnimations:@"改变大小" context:NULL];
//在准备动画的时候可以设置动画的属性
[UIView setAnimationDuration:2];//设置动画的持续时间
[UIView setAnimationDelegate:self];
[UIView setAnimationWillStartSelector:@selector(startAnimation)];
// [UIView setAnimationDelay:1];//动画延迟执行时间
[UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];//动画的曲线
[UIView setAnimationRepeatCount:20];//动画的重复次数
[UIView setAnimationRepeatAutoreverses:YES];//动画往返执行, 必须设置动画的重复次数
//2 修改view的属性, 可以同时修改多个属性 注意:不是所有的属性都可以修改的(只有frame, center, bounds, backgroundColor, alpha, transform 可以修改)
self.changeView.frame = CGRectMake(110, 100, 100, 100);
// self.changeView.backgroundColor = [UIColor brownColor];
self.changeView.backgroundColor = [UIColor colorWithRed:arc4random() % 256 / 255.0 green:arc4random() % 256 / 255.0 blue:arc4random() % 256 / 255.0 alpha:0.5];
//3 提交并执行动画
[UIView commitAnimations];
}
//UIView过度动画
- (IBAction)pressTranstionAnimation:(id)sender {
//1 准备动画
[UIView beginAnimations:@"过度动画" context:NULL];
[UIView setAnimationDuration:5];
[UIView setAnimationRepeatCount:50];
//2 设置过度样式
//参数1: 过度样式, 参数2: 指定那个View做动画, 参数3: 是否设置缓存
[UIView setAnimationTransition:UIViewAnimationTransitionFlipFromLeft forView:self.changeView cache:YES];
self.changeView.backgroundColor = [UIColor colorWithRed:arc4random() % 256 / 255.0 green:arc4random() % 256 / 255.0 blue:arc4random() % 256 / 255.0 alpha:0.5];
//3 提交并执行动画
[UIView commitAnimations];
}
//Block动画
- (IBAction)pressBlockAnimation:(id)sender {
//只有一行代码 Block动画实质是对UIView动画的封装
//参数1:动画时长 参数2:Block: 设置要修改的View属性
/*
[UIView animateWithDuration:2 animations:^{
self.changeView.backgroundColor = [UIColor orangeColor];
}];
*/
//第二种Block
/*
//参数1:动画时长 参数2:Block: 设置要修改的View属性 参数3: 动画完成时调用
[UIView animateWithDuration:2 animations:^{
self.changeView.backgroundColor = [UIColor orangeColor];
} completion:^(BOOL finished) {
//finished判断动画是否完成
if (finished) {
NSLog(@"finished");
}
}];
*/
//第三种Block
/*
[UIView animateWithDuration:2 delay:1 options:UIViewAnimationOptionCurveEaseInOut animations:^{
// 设置要修改的View属性
self.changeView.backgroundColor = [UIColor orangeColor];
} completion:^(BOOL finished) {
//finished判断动画是否完成
if (finished) {
NSLog(@"finished");
}
}];
*/
//对过度动画的封装
//参数1: 改变的View 参数2:动画时长 参数3:动画类型 参数4 Block: 设置要修改的View属性 参数5:完成后的操作
[UIView transitionWithView:self.changeView duration:2 options:UIViewAnimationOptionTransitionFlipFromLeft animations:^{
self.changeView.backgroundColor = [UIColor orangeColor];
} completion:^(BOOL finished) {
//finished判断动画是否完成
if (finished) {
NSLog(@"finished");
}
}];
}
#pragma mark - AnimationDelegate
//动画将要开始时调用
- (void)animationWillStart:(NSString *)animationID context:(void *)context
{
NSLog(@"start: %@, %@", animationID, context);
}
//动画结束时调用
- (void)animationDidStop:(NSString *)animationID finished:(NSNumber *)finished context:(void *)context
{
NSLog(@"stop: %@, %@", animationID, context);
}
- (void)startAnimation
{
NSLog(@"self");
}
- (void)dealloc {
[_changeView release];
[super dealloc];
}
@end
//
// SecondVC.m
// LessonAnimation
//
// Created by lanouhn on 14-9-17.
// Copyright (c) 2014年 vaercly@163.com 陈聪雷. All rights reserved.
//
#import "SecondVC.h"
@interface SecondVC ()
@end
@implementation SecondVC
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
// Custom initialization
}
return self;
}
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view from its nib.
NSLog(@"%@", NSStringFromCGRect(self.changeView.frame));
NSLog(@"%f", CGRectGetWidth(self.changeView.frame));
//UIView和CALayer的关系
//UIView负责交互, frame以及显示CALayer
//CALayer负责渲染, 并且它是UIView的一个readonly属性
/*
self.changeView.layer.cornerRadius = 100;//设置圆角, 参数是内切圆的半径, 若想画一个圆, 前提是view必须是正方形, 参数应该是view边长的一半
self.changeView.layer.borderWidth = 1;//设置描边的宽度
self.changeView.layer.borderColor = [UIColor orangeColor].CGColor;//设置描边的颜色(UIView上的颜色使用的是UIColor, CALayer上使用的颜色是CGColor)
self.changeView.layer.shadowOffset = CGSizeMake(50, 100);//设置阴影的偏移量 width影响水平偏移(正右负左), height影响垂直偏移(正下负上)
self.changeView.layer.shadowColor = [UIColor grayColor].CGColor;//阴影的偏移的颜色
self.changeView.layer.shadowOpacity = 1;//阴影的不透明度, 取值范围(0 ~ 1), 默认是0, 就是透明的
*/
// CAAnimation抽象类, 使用必须要使用其具体的子类
// CAPropertyAnimation抽象子类, 需要子类化
// CABasicAnimation
// CAKeyframeAnimation
}
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
- (void)dealloc {
[_changeView release];
[super dealloc];
}
//CABasicAnimation基本动画 没有真正的修改属性值
- (IBAction)pressBasicAnimation:(id)sender {
//1 创建并指定要修改的属性
// KeyPath:CAlayer的属性名, 不是所有的属性都可以, 只有在头文件中出现animatable的属性才可以, 可以修改属性的属性, 例如:bounds.size
// CALayer
CABasicAnimation *basic = [CABasicAnimation animationWithKeyPath:@"bounds"];
[basic setDuration:2];
//2 修改属性值
basic.fromValue = [NSValue valueWithCGRect:CGRectMake(0, 0, self.changeView.bounds.size.width, self.changeView.bounds.size.height)];
basic.toValue = [NSValue valueWithCGRect:CGRectMake(0, 0, 300, 300)];
// basic.byValue =
//3 添加动画
//key做区分动画用
[self.changeView.layer addAnimation:basic forKey:@"changColor"];
}
//CAKeyframeAnimation关键帧动画
- (IBAction)pressKeyFrameAnimation:(id)sender {
/*
//1 创建动画
CAKeyframeAnimation *keyFrame = [CAKeyframeAnimation animationWithKeyPath:@"bounds"];
[keyFrame setDuration:2];
//2 修改属性
keyFrame.values = @[[NSValue valueWithCGRect:CGRectMake(0, 0, self.changeView.bounds.size.width, self.changeView.bounds.size.height)], [NSValue valueWithCGRect:CGRectMake(0, 0, 250, 250)], [NSValue valueWithCGRect:CGRectMake(0, 0, 300, 300)]];
// keyTimes:值代表了出现动画的时刻, 值得范围是0~1, 值必须是递增的, keyTimes和values是一一对应的
keyFrame.keyTimes = @[@(0.4), @(0.6), @(1)];
//3 添加动画
[self.changeView.layer addAnimation:keyFrame forKey:@"keyFrame"];
*/
CAKeyframeAnimation *keyFrame = [CAKeyframeAnimation animationWithKeyPath:@"backgroundColor"];
[keyFrame setDuration:10];
keyFrame.values = @[(id)[UIColor redColor].CGColor, (id)[UIColor orangeColor].CGColor, (id)[UIColor yellowColor].CGColor, (id)[UIColor greenColor].CGColor, (id)[UIColor blueColor].CGColor];
//keyTimes中的第一个值是0, 不能修改
keyFrame.keyTimes = @[@(0.3), @(0.5), @(0.6), @(0.7), @(0.9)];
[self.changeView.layer addAnimation:keyFrame forKey:nil];
}
// CATransaction 过度动画
- (IBAction)pressTransition:(id)sender {
//1 创建
CATransition *transition = [CATransition animation];
[transition setDuration:2];
//2 设置过度样式
transition.type = kCATransitionReveal;//控制样式
transition.subtype = kCATransitionFromTop;//控制方向
//添加动画
[self.changeView.layer addAnimation:transition forKey:nil];
}
// CAAnimationGroup 组动画
- (IBAction)pressAnimationGroup:(id)sender {
//1 创建并指定要修改的属性
// KeyPath:CAlayer的属性名, 不是所有的属性都可以, 只有在头文件中出现animatable的属性才可以, 可以修改属性的属性, 例如:bounds.size
// CALayer
CABasicAnimation *basic = [CABasicAnimation animationWithKeyPath:@"bounds"];
[basic setDuration:2];
//2 修改属性值
basic.fromValue = [NSValue valueWithCGRect:CGRectMake(0, 0, self.changeView.bounds.size.width, self.changeView.bounds.size.height)];
basic.toValue = [NSValue valueWithCGRect:CGRectMake(0, 0, 300, 300)];
CAKeyframeAnimation *keyFrame = [CAKeyframeAnimation animationWithKeyPath:@"backgroundColor"];
[keyFrame setDuration:5];
keyFrame.values = @[(id)[UIColor redColor].CGColor, (id)[UIColor orangeColor].CGColor, (id)[UIColor yellowColor].CGColor, (id)[UIColor greenColor].CGColor, (id)[UIColor blueColor].CGColor];
//keyTimes中的第一个值是0, 不能修改
keyFrame.keyTimes = @[@(0.3), @(0.5), @(0.6), @(0.7), @(0.9)];
// 创建
//当group动画的时长 > 组中所有动画的最长时长, 动画的时长以组中最长的时长为准
//当group动画的时长 < 组中所有动画的最长时长, 动画的时长以group的时长为准
//最合适: group的时长 = 组中所有动画的最长时长
CAAnimationGroup *group = [CAAnimationGroup animation];
[group setDuration:10];
//设置组动画
group.animations = @[basic, keyFrame];
//添加动画
[self.changeView.layer addAnimation:group forKey:nil];
}
@end
相关推荐
微磁模拟实战指南:从OOMMF安装到首个3D模型运行
本文详细介绍了OOMMF微磁模拟软件的安装与使用,从环境配置到首个3D模型运行的完整教程。涵盖Windows、Linux和macOS平台的安装避坑指南,以及MIF文件编写、并行计算优化等实战技巧,帮助研究人员快速掌握这一开源工具在磁畴壁运动、磁滞回线等微磁学问题中的应用。
iOS UIView动画实践(三):Transition Animation
2019独角兽企业重金招聘Python工程师标准>>> ...
告别手动下载!用Python脚本5分钟搞定NREL风速数据(附完整API调用代码)
本文详细介绍了如何使用Python脚本自动化获取NREL风速数据,从API密钥申请到数据保存的全流程。通过完整的API调用代码和实战技巧,帮助研究人员和开发者高效下载全球高精度风速数据,告别繁琐的手动操作,提升工作效率。
UIView 的transitionFromView方法实现视图切换
#import "ViewController.h" @interface ViewController () @property (strong, nonatomic) IBOutlet UIImageView *imageViewFirst; @property (strong, nonatomic) IBOutlet UIImageView *imageViewSecond; ...
Unity Android构建报错:compileSdk 35兼容性五层定位法
Android构建中的compileSdk是编译时API目标版本,其升级并非孤立操作,而是触发JDK、Android Gradle Plugin(AGP)、NDK、targetSdk与Unity引擎版本之间强耦合校验的起点。当出现'using a newer Android Gradle plugin to use compileSdk = 35'类报错,本质是代际技术栈错配——例如AGP 7.1.3不识别compileSdk 35所需Java 17语法,或NDK 21与AGP 7.4的ABI规范冲突。该问
数学:箭头符号→(to)都表示什么意义?
数学符号“→”在不同领域有不同含义:在逻辑中表示“蕴含”(p→q);在函数中表示映射关系(f:A→B);在极限中表示变量趋近(x→a);在推导过程中表示推理方向(A→B)。此外,它也可能用于向量表示或数列趋势。其具体含义需结合上下文判断,核心应用场景包括逻辑运算、函数定义、极限分析和数学推导等。
UIView动画 Swift操作
前言: iOS里使用闭包对UIView对象可进行简洁而又强大的动画效果设置。与Android不同的是,后者需要设置xml及动画类才能完成复杂的动画效果,而iOS仅使用animate与transition属性闭包便可完成。 在iOS里动画可简单分为属性过渡动画与转场动画,而属性过渡动画可分为单层闭包动画、双层闭包动画与多参数闭包动画,下面是其具体介绍。 属性过度动画: 属性过渡是指某UIView (注意所有控件为其派生类)某些属性改变时,将改变过程以渐变效果进行动画展示。 单层闭包动画: 所谓单层闭包动画即为
大麦网抢票软件工具开发系列(一)
前言《大麦网》都知道吧,就是那个被网友声称“大麦网你卖啥了?”票务平台。近期有听到朋友说《大麦网》的票很难抢,基本上都是说:“哎哟喂,被挤爆啦,请稍后重试!”,也不知道《大麦网》...
iOS一文轻松了解UIKit动画制作,如此简单
任何 Layer 的可动画属性的设置都属于某个 CATransaction,事务的作用是为了保证多个属性的变化同时进行。CABasicAnimation有三个比较重要的属性,fromValue,toValue,byValue,这三个属性都是可选的,但不能同时多于两个为非空.最终都是为了确定animation变化的起点和终点.中间的值都是通过插值方式计算出来的.插值计算的结果由timingFunction指定,默认timingFunction为nil,会使用liner的,也就是变化是均匀的.
SAP-ABAP:在SAP系统中,COEP表(成本控制对象行项目表)详解
在SAP系统中,COEP表(成本控制对象行项目表)详解
AUTOSAR从入门到精通-汽车电子电气架构(EEA)
EEA(Electrical/Electronic Architecture),电子电气架构,是首先由德尔福公司提出的,集合汽车的电子电气系统原理设计、中央电器盒的设计、连接器的设计、电子电气分配系统等设计为一体的整车电子电气解决方案的概念。通过EEA的设计,可将动力总成、驱动信息、娱乐信息等车身信息转化为实际的电源分配的物理布局、信号网络、数据网络、诊断、容错、能量管理等的电子电气解决方案。
BasicAnimation:iOS 属性动画的利器
BasicAnimation:iOS 属性动画的利器 在移动应用开发中,动画效果是提升用户体验的关键因素之一。无论是简单的缩放、旋转,还是复杂的组合动画,都能为应用增添活力。今天,我们将向您推荐一款强大的 iOS 动画库——BasicAnimation,它能让您轻松实现各种动画效果,只需一句代码即可完成。 项目介绍 BasicAnimation 是一个专为 iOS 开发者设计的动画库,支持多种常见...
记录一次Spring Framework 漏洞修复的过程
摘要:针对Spring Boot 2.6.13项目在阿里云漏洞扫描中发现的Spring Framework目录遍历漏洞(CVE-2024-38819),首先分析了漏洞成因,确认5.3.23版本存在风险。解决方案包括升级Spring Boot至2.7.18(对应Spring Framework 5.3.41)或6.0+版本,但后者需JDK17支持。临时方案通过配置HttpFirewall限制特殊字符,最终借助阿里云防护服务暂时解决问题。建议长期解决方案仍需升级至安全版本(Spring Boot 6.1.14或
[IOS]今天开始学UI---UIIView的transform和contentMode属性
UIView transform和contentMode属性
WINCC7.3破解文件
WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!
数学建模模型总结
这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!
iOS动画 CABaseAnimation总结
iOS动画 CABaseAnimation总结
精雕软件(JDpaint) 5.5 绿色版
精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版
Animation
一、iOS动画 iOS中实现一个动画十分简单,在view层面上通过调用 [UIView animateWithDuration:duration animations:^{ //执行动画 }] 但是它不能控制动画的暂停和组合,所以就需要用到CoreAnimation了。 iOS中的动画主要分为:基础动画(CABasicAnimation)、关键帧动画(CA
ET2012新版免狗免安装绿色软件
ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,
UIView动画总结
UIView动画总结1.大小动画(改变frame)-(void)changeFrame{ CGRect originalRect = self.anView.frame; CGRect rect = CGRectMake(self.anView.frame.origin.x-20, self.anView.frame.origin.y-120, 160, 80); [UIView
IOS中的动画
IOS中的动画右两大类1.UIView的视图动画2.Layer的动画 UIView的动画也是基于Layer的动画 动画的代码格式都很固定 1.UIView动画 一般方式 [UIView beginAnimations:@"ddd" context:nil];//设置动画 [UIView commitAnimations]; //提交动画 这两个是必须有的,然后在两句的中间添加动
transition与animate动画区别
transition(过渡) transition: property duration timing-function delay; 值 描述 transition-property 规定设置过渡效果的 CSS 属性的名称。 transition-duration 规定完成过渡效果需要多少秒或毫秒。 transition-timing-function 规定速度效果的速度曲线。 transition-delay 定义过渡效果何时开始。 animate 简写:animati
self.view 添加子视图 和 简单的 UIView 的组合动画
/** 把 view1 加到 self.view 的 view2下边 */ [self.view insertSubview:view1 belowSubview:view2]; /** 把 view1 加到 self.view 的 view2上边 */ [self.view insertSubview:view1 aboveS
Layer中自定义属性的动画
默认情况下,CALayer 及其子类的绝大部分标准属性都可以执行动画,无论是添加一个CAAnimation 到 Layer(显式动画),亦或是为属性指定一个动作然后修改它(隐式动画)。 但有时候我们希望能同时为好几个属性添加动画,使它们看起来像是一个动画一样;或者,我们需要执行的动画不能通过使用标准 Layer 属性动画来实现。 在本文中,我们将讨论如何子类化 CALayer 并添
iOS UIView - UIViewTransition动画
-(void)touchesBegan:(NSSetUITouch *> *)touches withEvent:(UIEvent *)event{ [UIView beginAnimations:@"Action" context:nil]; [UIView setAnimationDuration:3]; // [UIView setAnimationTr
UIView Transition
2019独角兽企业重金招聘Python工程师标准>>> ...
iOS那些简单的动画,属性详解和转场动画
关于 Core Animation Core Animation是一组非常强大的动画处理API,使用它能做出很多优雅的动画效果。能用的动画类有4个子类:CABasicAnimation、CAKeyframeAnimation、CATransition、CAAnimationGroup 开发步骤: 1. 初始化一个动画对象(CAAnimation
153



被折叠的 条评论
为什么被折叠?



