简单动画
#define kDegreesToRadian(x) (M_PI * (x) /?180.0)
?
#define kRadianToDegrees(radian) (radian*180.0)/(M_PI)
?
- (void)viewDidLoad
{
? ? [superviewDidLoad];
? ??self.title?=?@"測試動畫";
? ??self.view.backgroundColor?= [UIColorlightGrayColor];
?? ?
?? ?
? ??myTest1?= [[UILabelalloc]initWithFrame:CGRectMake(10,?100,?60,?40)];
? ??myTest1.backgroundColor?= [UIColorblueColor];
? ??myTest1.textAlignment?=?NSTextAlignmentCenter;
? ??myTest1.text?=?@"張明煒";
? ??myTest1.textColor?= [UIColorwhiteColor];
? ? [self.viewaddSubview:myTest1];
?? ?
? ? ??//閃爍效果。
//? ? [myTest1.layer addAnimation:[self opacityForever_Animation:0.5] forKey:nil];
? ? ??///移動的動畫。
//? ? [myTest1.layer addAnimation:[self moveX:1.0f X:[NSNumber numberWithFloat:200.0f]] forKey:nil];
? ??//縮放效果。
//? ? [myTest1.layer addAnimation:[self scale:[NSNumber numberWithFloat:1.0f] orgin:[NSNumber numberWithFloat:3.0f] durTimes:2.0f Rep:MAXFLOAT] forKey:nil];
?? ??//組合動畫。
//? ? NSArray *myArray = [NSArray arrayWithObjects:[self opacityForever_Animation:0.5],[self moveX:1.0f X:[NSNumber numberWithFloat:200.0f]],[self scale:[NSNumber numberWithFloat:1.0f] orgin:[NSNumber numberWithFloat:3.0f] durTimes:2.0f Rep:MAXFLOAT], nil];
//? ? [myTest1.layer addAnimation:[self groupAnimation:myArray durTimes:3.0f Rep:MAXFLOAT] forKey:nil];
? ??//路徑動畫。
//? ? CGMutablePathRef myPah = CGPathCreateMutable();
//? ? CGPathMoveToPoint(myPah, nil,30, 77);
//? ? CGPathAddCurveToPoint(myPah, nil, 50, 50, 60, 200, 200, 200);//這里的是控制點。
//? ? [myTest1.layer addAnimation:[self keyframeAnimation:myPah durTimes:5 Rep:MAXFLOAT] forKey:nil];
? ??//旋轉(zhuǎn)動畫。
? ? [myTest1.layeraddAnimation:[selfrotation:2degree:kRadianToDegrees(90)?direction:1repeatCount:MAXFLOAT]?forKey:nil];
?? ?
?? ?
}
?
#pragma mark ===?永久閃爍的動畫?======
-(CABasicACnimation?*)opacityForever_Animation:(float)time
{
? ??CABasicAnimation?*animation = [CABasicAnimationanimationWithKeyPath:@"opacity"];//必須寫opacity才行。
? ? animation.fromValue?= [NSNumbernumberWithFloat:1.0f];
? ? animation.toValue?= [NSNumbernumberWithFloat:0.0f];//這是透明度。
? ? animation.autoreverses?=?YES;
? ? animation.duration?= time;
? ? animation.repeatCount?=?MAXFLOAT;
? ? animation.removedOnCompletion?=?NO;
? ? animation.fillMode?=?kCAFillModeForwards;
?? ? animation.timingFunction=[CAMediaTimingFunctionfunctionWithName:kCAMediaTimingFunctionEaseIn];///沒有的話是均勻的動畫。
? ??return?animation;
}
?
#pragma mark =====橫向、縱向移動===========
-(CABasicAnimation?*)moveX:(float)time X:(NSNumber?*)x
{
? ??CABasicAnimation?*animation = [CABasicAnimationanimationWithKeyPath:@"transform.translation.x"];///.y的話就向下移動。
? ? animation.toValue?= x;
? ? animation.duration?= time;
? ? animation.removedOnCompletion?=?NO;//yes的話,又返回原位置了。
? ? animation.repeatCount?=?MAXFLOAT;
? ? animation.fillMode?=?kCAFillModeForwards;
? ??return?animation;
}
?
#pragma mark =====縮放-=============
-(CABasicAnimation?*)scale:(NSNumber?*)Multiple orgin:(NSNumber?*)orginMultiple durTimes:(float)time Rep:(float)repertTimes
{
? ??CABasicAnimation?*animation = [CABasicAnimationanimationWithKeyPath:@"transform.scale"];
? ? animation.fromValue?= Multiple;
? ? animation.toValue?= orginMultiple;
? ? animation.autoreverses?=?YES;
? ? animation.repeatCount?= repertTimes;
? ? animation.duration?= time;//不設(shè)置時候的話,有一個默認(rèn)的縮放時間.
? ? animation.removedOnCompletion?=?NO;
? ? animation.fillMode?=?kCAFillModeForwards;
? ??return? animation;
}
?
#pragma mark =====組合動畫-=============
-(CAAnimationGroup?*)groupAnimation:(NSArray?*)animationAry durTimes:(float)time Rep:(float)repeatTimes
{
? ??CAAnimationGroup?*animation = [CAAnimationGroupanimation];
? ? animation.animations?= animationAry;
? ? animation.duration?= time;
? ? animation.removedOnCompletion?=?NO;
? ? animation.repeatCount?= repeatTimes;
? ? animation.fillMode?=?kCAFillModeForwards;
? ??return?animation;
}
?
#pragma mark =====路徑動畫-=============
-(CAKeyframeAnimation?*)keyframeAnimation:(CGMutablePathRef)path durTimes:(float)time Rep:(float)repeatTimes
{
? ??CAKeyframeAnimation?*animation = [CAKeyframeAnimationanimationWithKeyPath:@"position"];
? ? animation.path?= path;
? ? animation.removedOnCompletion?=?NO;
? ? animation.fillMode?=?kCAFillModeForwards;
? ? animation.timingFunction?= [CAMediaTimingFunctionfunctionWithName:kCAMediaTimingFunctionEaseIn];
? ? animation.autoreverses?=?NO;
? ? animation.duration?= time;
? ? animation.repeatCount?= repeatTimes;
? ??return?animation;
}
?
#pragma mark ====旋轉(zhuǎn)動畫======
-(CABasicAnimation?*)rotation:(float)dur degree:(float)degree direction:(int)direction repeatCount:(int)repeatCount
{
? ??CATransform3D?rotationTransform =?CATransform3DMakeRotation(degree,?0,?0, direction);
? ??CABasicAnimation?*animation = [CABasicAnimationanimationWithKeyPath:@"transform"];
? ? animation.toValue?= [NSValue?valueWithCATransform3D:rotationTransform];
? ? animation.duration? =? dur;
? ? animation.autoreverses?=?NO;
? ? animation.cumulative?=?NO;
? ? animation.fillMode?=?kCAFillModeForwards;
? ? animation.repeatCount?= repeatCount;
? ? animation.delegate?=?self;
?
? ??return?animation;
?
}
總結(jié)