IOS几种类型的动画
2015-12-02 19:23
483 查看
1.点击按钮,弹出View,再次点击,View回去
创建一个Button,并给button设置一个Bool值,在button的点击事件里写:
- (void)viewBtnAction:(UIButton
*)btn{
if (self.viewbtn.selected)
{
[UIView
animateWithDuration:0.5
animations:^{
self.myView.frame
=
CGRectMake(0,
677,
375,
50);
NSLog(@"===== %@",
NSStringFromCGRect(self.myView.frame));
}];
}else{
//view动画
//参数1:动画时长
[UIView
animateWithDuration:0.5
animations:^{
self.myView.frame =
CGRectMake(0,
577, 375,
50);
NSLog(@"===== %@",NSStringFromCGRect(self.myView.frame));
}];
}
2.点击按钮.弹出View,过几秒,View自动回去
创建一个Button,在button的点击事件里写:
- (void)viewBtnAction:(UIButton
*)btn{
[UIView
animateWithDuration:0.5
animations:^{
self.myView.frame
=
CGRectMake(0,
677,
375,
50);
NSLog(@"===== %@",
NSStringFromCGRect(self.myView.frame));
}];
//delay
延迟几秒执行
[UIView
animateWithDuration:0.5
delay:0.5
options:UIViewAnimationOptionLayoutSubviews
animations:^{
self.myView.frame
=
CGRectMake(0,
667,
375,
50);
}
completion:^(BOOL
finished) {
}];
}
3.键盘上的自定义动画框
//监听键盘弹起
[[NSNotificationCenter
defaultCenter]addObserver:self
selector:@selector(keyboardWillShow:)
name:UIKeyboardWillShowNotification
object:nil];
- (void)keyboardWillShow:(NSNotification
*)notif{
//得到键盘frame,通过键盘frame改变自定义工具栏高度
CGRect frame = [[[notif
userInfo]
objectForKey:UIKeyboardFrameEndUserInfoKey]
CGRectValue];
NSLog(@"frame == %@",
NSStringFromCGRect(frame));
//view动画
//参数1:动画时长
[UIView
animateWithDuration:0.5
animations:^{
self.myView.frame
=
CGRectMake(0,
627
- frame.size.height,
375,
50);
NSLog(@"===== %@",
NSStringFromCGRect(self.myView.frame));
}];
}
4.
Transform动画
创建一个View,和一个按钮,在按钮的点击事件里写
- (void)TransformBtnAction:(UIButton
*)btn{
//transform是View的一个属性,是用来改变View的形态的,通过设置transform属性值可以实现View的形态变化,比如旋转,缩放等
//rotate:旋转的意思 M_PI是180度
// self.myView.transform = CGAffineTransformRotate(self.myView.transform, M_PI_4);
//每次缩放原来的0.9倍
// self.myView.transform = CGAffineTransformScale(self.myView.transform, 0.9, 0.9);
//移动
正数代表往右下方移动,负数代表往左上方移动
self.myView.transform =
CGAffineTransformTranslate(self.myView.transform,
5, 5);
}
5.layer动画
创建一个Button控制,点击旋转,再次点击停止,再点击又继续;在View上添加一张图片,并给图片设置轻拍,可以点击图片控制旋不旋转,并设置Bool值;
在Button的点击事件里写:
- (void)layerBtnAction:(UIButton
*)btn{
//layer层,每个View视图都有一个layer层,使用来设置View上的内容,比如背景颜色,frame,文字等内容,而View只用来负责显示layer层
//我们可以通过改变layer层的内容
//改变view z轴值
CABasicAnimation *animation = [CABasicAnimation
animationWithKeyPath:@"transform.rotation.z"];
//旋转起始值
animation.fromValue
= [NSNumber
numberWithInt:0];
//最终旋转的角度
animation.toValue
= [NSNumber
numberWithInt:M_PI
*
2];
//旋转时间
animation.duration
=
10;
//重复次数,NSIntegerMax为无限旋转
animation.repeatCount
=
NSIntegerMax;
//旋转结束后是否要逆向返回原位置
animation.autoreverses
=
NO;
//是否按照结束位置继续旋转
animation.cumulative
=
YES;
[self.imgV.layer
addAnimation:animation
forKey:@"basicAnimation"];
}
在轻拍事件里写:
- (void)tapImg:(UITapGestureRecognizer
*)tap{
if (self.isSelected) {
//获得上次停止的时间的偏移量
CFTimeInterval stopTime =
self.imgV.layer.timeOffset;
self.imgV.layer.beginTime
=
0;
//设置速度
self.imgV.layer.speed
=
1.0;
//设置偏移量为0
self.imgV.layer.timeOffset
=
0;
//设置开始时间
self.imgV.layer.beginTime
= [self.imgV.layer
convertTime:CACurrentMediaTime()
fromLayer:nil]
- stopTime;
}else{
//每一个view的layer层系统设置记录了一个时间的属性,通过改变view动画时间来控制动画效果
//获得当前旋转的时间点
CFTimeInterval stopTime = [self.imgV.layer
convertTime:CACurrentMediaTime()
fromLayer:nil];
//设置播放速度变成0,即停止
self.imgV.layer.speed
=
0;
self.imgV.layer.timeOffset
= stopTime;
}
self.isSelected
= !self.isSelected;
}
6.长按晃动
在一个View上添加长按手势
UILongPressGestureRecognizer
*longView = [[UILongPressGestureRecognizer
alloc]
initWithTarget:self
action:@selector(longView:)];
[self.myView
addGestureRecognizer:longView];
- (void)longView:(UILongPressGestureRecognizer
*)longTap{
//旋转
CAKeyframeAnimation *keyAnimation = [CAKeyframeAnimation
animationWithKeyPath:@"transform.rotation"];
float top =
M_PI /
18;
float bom = -M_PI
/
18;
keyAnimation.values
=
@[@(top),@(0),@(bom),@(0),@(top)];
keyAnimation.repeatCount
=
NSIntegerMax;
keyAnimation.duration
=
0.3;
[self.myView.layer
addAnimation:keyAnimation
forKey:@"key"];
dispatch_after(dispatch_time(DISPATCH_TIME_NOW,
(int64_t)(4
*
NSEC_PER_SEC)),
dispatch_get_main_queue(), ^{
//停止动画
[self.myView.layer
removeAnimationForKey:@"key"];
});
}
7.关键帧动画:
创建一个按钮,在按钮上放一张没颜色图片,点击按钮,变成另一张带颜色图片,在按钮的点击事件里写:
- (void)zanBtnAction:(UIButton
*)btn{
//关键帧动画
CAKeyframeAnimation *keyAnimation = [CAKeyframeAnimation
animationWithKeyPath:@"transform.scale"];
//设置关键帧的值,values是数组类型
keyAnimation.values
=
@[@(0.1),@(1.0),@(1.5)];
// NSNumber *num = [NSNumber numberWithFloat:0.1];
// keyAnimation.values = [NSArray arrayWithObjects:(nonnull id), ..., nil];
keyAnimation.duration
=
0.3;
[self.zanBtn.layer
addAnimation:keyAnimation
forKey:@"key"];
if (self.zanBtn.isSelected
==
NO) {
[self.zanBtn
setBackgroundImage:[UIImage
imageNamed:@"zan4.jpg"]
forState:UIControlStateNormal];
}else{
[self.zanBtn
setBackgroundImage:[UIImage
imageNamed:@"zan2.jpg"]
forState:UIControlStateNormal];
}
self.zanBtn.selected
= !self.zanBtn.selected;
}
创建一个Button,并给button设置一个Bool值,在button的点击事件里写:
- (void)viewBtnAction:(UIButton
*)btn{
if (self.viewbtn.selected)
{
[UIView
animateWithDuration:0.5
animations:^{
self.myView.frame
=
CGRectMake(0,
677,
375,
50);
NSLog(@"===== %@",
NSStringFromCGRect(self.myView.frame));
}];
}else{
//view动画
//参数1:动画时长
[UIView
animateWithDuration:0.5
animations:^{
self.myView.frame =
CGRectMake(0,
577, 375,
50);
NSLog(@"===== %@",NSStringFromCGRect(self.myView.frame));
}];
}
2.点击按钮.弹出View,过几秒,View自动回去
创建一个Button,在button的点击事件里写:
- (void)viewBtnAction:(UIButton
*)btn{
[UIView
animateWithDuration:0.5
animations:^{
self.myView.frame
=
CGRectMake(0,
677,
375,
50);
NSLog(@"===== %@",
NSStringFromCGRect(self.myView.frame));
}];
//delay
延迟几秒执行
[UIView
animateWithDuration:0.5
delay:0.5
options:UIViewAnimationOptionLayoutSubviews
animations:^{
self.myView.frame
=
CGRectMake(0,
667,
375,
50);
}
completion:^(BOOL
finished) {
}];
}
3.键盘上的自定义动画框
//监听键盘弹起
[[NSNotificationCenter
defaultCenter]addObserver:self
selector:@selector(keyboardWillShow:)
name:UIKeyboardWillShowNotification
object:nil];
- (void)keyboardWillShow:(NSNotification
*)notif{
//得到键盘frame,通过键盘frame改变自定义工具栏高度
CGRect frame = [[[notif
userInfo]
objectForKey:UIKeyboardFrameEndUserInfoKey]
CGRectValue];
NSLog(@"frame == %@",
NSStringFromCGRect(frame));
//view动画
//参数1:动画时长
[UIView
animateWithDuration:0.5
animations:^{
self.myView.frame
=
CGRectMake(0,
627
- frame.size.height,
375,
50);
NSLog(@"===== %@",
NSStringFromCGRect(self.myView.frame));
}];
}
4.
Transform动画
创建一个View,和一个按钮,在按钮的点击事件里写
- (void)TransformBtnAction:(UIButton
*)btn{
//transform是View的一个属性,是用来改变View的形态的,通过设置transform属性值可以实现View的形态变化,比如旋转,缩放等
//rotate:旋转的意思 M_PI是180度
// self.myView.transform = CGAffineTransformRotate(self.myView.transform, M_PI_4);
//每次缩放原来的0.9倍
// self.myView.transform = CGAffineTransformScale(self.myView.transform, 0.9, 0.9);
//移动
正数代表往右下方移动,负数代表往左上方移动
self.myView.transform =
CGAffineTransformTranslate(self.myView.transform,
5, 5);
}
5.layer动画
创建一个Button控制,点击旋转,再次点击停止,再点击又继续;在View上添加一张图片,并给图片设置轻拍,可以点击图片控制旋不旋转,并设置Bool值;
在Button的点击事件里写:
- (void)layerBtnAction:(UIButton
*)btn{
//layer层,每个View视图都有一个layer层,使用来设置View上的内容,比如背景颜色,frame,文字等内容,而View只用来负责显示layer层
//我们可以通过改变layer层的内容
//改变view z轴值
CABasicAnimation *animation = [CABasicAnimation
animationWithKeyPath:@"transform.rotation.z"];
//旋转起始值
animation.fromValue
= [NSNumber
numberWithInt:0];
//最终旋转的角度
animation.toValue
= [NSNumber
numberWithInt:M_PI
*
2];
//旋转时间
animation.duration
=
10;
//重复次数,NSIntegerMax为无限旋转
animation.repeatCount
=
NSIntegerMax;
//旋转结束后是否要逆向返回原位置
animation.autoreverses
=
NO;
//是否按照结束位置继续旋转
animation.cumulative
=
YES;
[self.imgV.layer
addAnimation:animation
forKey:@"basicAnimation"];
}
在轻拍事件里写:
- (void)tapImg:(UITapGestureRecognizer
*)tap{
if (self.isSelected) {
//获得上次停止的时间的偏移量
CFTimeInterval stopTime =
self.imgV.layer.timeOffset;
self.imgV.layer.beginTime
=
0;
//设置速度
self.imgV.layer.speed
=
1.0;
//设置偏移量为0
self.imgV.layer.timeOffset
=
0;
//设置开始时间
self.imgV.layer.beginTime
= [self.imgV.layer
convertTime:CACurrentMediaTime()
fromLayer:nil]
- stopTime;
}else{
//每一个view的layer层系统设置记录了一个时间的属性,通过改变view动画时间来控制动画效果
//获得当前旋转的时间点
CFTimeInterval stopTime = [self.imgV.layer
convertTime:CACurrentMediaTime()
fromLayer:nil];
//设置播放速度变成0,即停止
self.imgV.layer.speed
=
0;
self.imgV.layer.timeOffset
= stopTime;
}
self.isSelected
= !self.isSelected;
}
6.长按晃动
在一个View上添加长按手势
UILongPressGestureRecognizer
*longView = [[UILongPressGestureRecognizer
alloc]
initWithTarget:self
action:@selector(longView:)];
[self.myView
addGestureRecognizer:longView];
- (void)longView:(UILongPressGestureRecognizer
*)longTap{
//旋转
CAKeyframeAnimation *keyAnimation = [CAKeyframeAnimation
animationWithKeyPath:@"transform.rotation"];
float top =
M_PI /
18;
float bom = -M_PI
/
18;
keyAnimation.values
=
@[@(top),@(0),@(bom),@(0),@(top)];
keyAnimation.repeatCount
=
NSIntegerMax;
keyAnimation.duration
=
0.3;
[self.myView.layer
addAnimation:keyAnimation
forKey:@"key"];
dispatch_after(dispatch_time(DISPATCH_TIME_NOW,
(int64_t)(4
*
NSEC_PER_SEC)),
dispatch_get_main_queue(), ^{
//停止动画
[self.myView.layer
removeAnimationForKey:@"key"];
});
}
7.关键帧动画:
创建一个按钮,在按钮上放一张没颜色图片,点击按钮,变成另一张带颜色图片,在按钮的点击事件里写:
- (void)zanBtnAction:(UIButton
*)btn{
//关键帧动画
CAKeyframeAnimation *keyAnimation = [CAKeyframeAnimation
animationWithKeyPath:@"transform.scale"];
//设置关键帧的值,values是数组类型
keyAnimation.values
=
@[@(0.1),@(1.0),@(1.5)];
// NSNumber *num = [NSNumber numberWithFloat:0.1];
// keyAnimation.values = [NSArray arrayWithObjects:(nonnull id), ..., nil];
keyAnimation.duration
=
0.3;
[self.zanBtn.layer
addAnimation:keyAnimation
forKey:@"key"];
if (self.zanBtn.isSelected
==
NO) {
[self.zanBtn
setBackgroundImage:[UIImage
imageNamed:@"zan4.jpg"]
forState:UIControlStateNormal];
}else{
[self.zanBtn
setBackgroundImage:[UIImage
imageNamed:@"zan2.jpg"]
forState:UIControlStateNormal];
}
self.zanBtn.selected
= !self.zanBtn.selected;
}
相关文章推荐
- iOS开发讯飞语音SDK使用 error code:10111 解决方案
- ios自动布局
- iOS快速开发框架--Bee Framework
- EventKit
- iOS应用开发之Core Data数据持久化存储笔记
- iOS错误:AFNetworking Error Domain=NSURLErrorDomain Code=-999
- 【iOS】plist无法写入的原因
- iOS 线程的基本介绍
- iOS之保存图片到手机相册中
- iOS 开发笔记和技巧总结 (二)
- iOS开发——keychain的使用
- iOS多线程的初步研究(四)-- NSTimer
- iOS 多线程下的NStimer 的使用
- iOS开发常见正则表达式
- ios textField 输入值监听
- iOS RunLoop 初识
- iOS开发笔记-判断输入的是否是字母
- iOS开发之核心动画
- iOS开发笔记- 判断是否是数字
- [原]iOS--字符编码,NSString和UTF-8间的转换