IOS中自带动画效果:三种实现方式。
第一种实现方式是在ios3.0之前的版本使用的:
[UIView beginAnimations:nil context:nil];//开始动画
[UIView setAnimationDuration:2.0f];//动画时间
[UIView setAnimationDelegate:self];//设置代理
//这里写你的动画效果
[UIView commitAnimations];//关闭动画
使用UIView的Transform属性来实现动画;
主要有三个方法:
CGAffineTransformMakeTranslation(CGFloat tx, CGFloat ty)(平移:设置平移量)
CGAffineTransformMakeScale(CGFloat sx, CGFloat sy)(缩放:设置缩放比例)
CGAffineTransformMakeRotation(CGFloat angle)(旋转:设置旋转角度)
在结束之后可以还原
view.transform = CGAffineTransformIdentity;
第二种方法是在ios4.0之后提供的方法:
[UIView animateWithDuration:2.0//动画时常
animations:^{//你需要的动画
}];
或者你需要完成后执行一段代码
[UIView animateWithDuration:2.0
animations:^{
//你需要的动画
} completion:^(BOOL finished) {
动画完成后执行
}];
或者你需要动画开始前有一段延迟,或自己设定动画效果
[UIView animateWithDuration:2.0
delay:2.0//动画延迟执行
options:UIViewAnimationOptionCurveEaseInOut//动画效果
animations:^{
}]
或者你需要动画带有类似弹簧的效果
[UIView animateWithDuration:4.0 // 动画时长
delay:0.0 // 动画延迟
usingSpringWithDamping:1.0 // 类似弹簧振动效果 0~1
initialSpringVelocity:5.0 // 初始速度
options:UIViewAnimationOptionCurveEaseInOut // 动画过渡效果
animations:^{
// code...
} completion:^(BOOL finished) {
// 动画完成后执行
// code...
}];
usingSpringWithDamping是弹簧效果。数值范围为0~1,数值越小弹簧效果越明显。
第三种实现方法是关键帧动画
创建关键帧方法:
/**
* 添加关键帧方法
*
* @param duration 动画时长
* @param delay 动画延迟
* @param options 动画效果选项
* @param animations 动画执行代码
* @param completion 动画结束执行代码
*/
+ (void)animateKeyframesWithDuration:(NSTimeInterval)duration
delay:(NSTimeInterval)delay
options:(UIViewKeyframeAnimationOptions)options
animations:(void (^)(void))animations
completion:(void (^)(BOOL finished))completion;
添加关键帧:
/**
* 添加关键帧
*
* @param frameStartTime 动画相对开始时间
* @param frameDuration 动画相对持续时间
* @param animations 动画执行代码
*/
+ (void)addKeyframeWithRelativeStartTime:(double)frameStartTime
relativeDuration:(double)frameDuration
animations:(void (^)(void))animations;
以上说的相对时间,也就是说:“它们自身会根据动画总持续时长自动匹配其运行时长”
使用方法:
void (^keyFrameBlock)() = ^(){
// 创建颜色数组
NSArray *arrayColors = @[[UIColor orangeColor],
[UIColor yellowColor],
[UIColor greenColor],
[UIColor blueColor],
[UIColor purpleColor],
[UIColor redColor]];
NSUInteger colorCount = [arrayColors count];
// 循环添加关键帧
for (NSUInteger i = 0; i < colorCount; i++) {
[UIView addKeyframeWithRelativeStartTime:i / (CGFloat)colorCount
relativeDuration:1 / (CGFloat)colorCount
animations:^{
[_graduallyView setBackgroundColor:arrayColors[i]];
}];
}
};
[UIView animateKeyframesWithDuration:4.0
delay:0.0
options:UIViewKeyframeAnimationOptionCalculationModeCubic | UIViewAnimationOptionCurveLinear
animations:keyFrameBlock
completion:^(BOOL finished) {
// 动画完成后执行
// code...
}];