目前公司的兩個(gè)項(xiàng)目一直使用的是自己封裝的一個(gè)簡易動(dòng)畫,現(xiàn)在打算把動(dòng)畫簡單的優(yōu)化重構(gòu)一下,做為動(dòng)畫工具調(diào)用洞坑。動(dòng)畫效果非常簡潔輕量,并且不依賴任何庫赏表,歡迎各位來圍觀吐槽~检诗。
動(dòng)畫效果示例如下圖所示:
1.簡單的調(diào)用API:
+(instancetype)shareAnimation;
//開始動(dòng)畫
- (void)startAnimating;
//結(jié)束動(dòng)畫
- (void)stopAnimating;
// 動(dòng)畫狀態(tài)
- (BOOL)isAnimating;
//可以設(shè)置動(dòng)畫提示文字
-(void)startAnimatingWithTitle:(NSString *)title;
2.具體實(shí)現(xiàn):
使用UIView類實(shí)現(xiàn)動(dòng)畫
a.初始化動(dòng)畫視圖控件匈仗,同時(shí)保存視圖transform和center初始值
-(instancetype)init
{
if (self = [super init]) {
self.frame = CGRectMake(0, 0, 100, 50);
self.center = CGPointMake(kScreenWidth/2.0, kScreenHeight/2.0);
UIView *blueView = [[UIView alloc]initWithFrame:CGRectMake(0, 0, 30, 30)];
blueView.center = CGPointMake(35, 25);
blueView.backgroundColor = [UIColor blueColor];
[self drawCircleView:blueView];
self.blueView = blueView;
[self addSubview:blueView];
UIView *greenView = [[UIView alloc]initWithFrame:CGRectMake(0, 0, 50, 50)];
greenView.center = CGPointMake(75, 25);
greenView.backgroundColor = [UIColor greenColor];
self.greenView = greenView;
//通過CAShapeLayer結(jié)合UIBezierPath生成圓角
[self drawCircleView:greenView];
[self addSubview:greenView];
blueCenter = self.blueView.center;
greenCenter= self.greenView.center;
blueTransform = self.blueView.transform;
greenTransform = self.greenView.transform;
self.hidden = YES;
}
return self;
}
繪制圓角
- (void)drawCircleView:(UIView*)view
{
CAShapeLayer *maskLayer = [CAShapeLayer layer];
maskLayer.path = [UIBezierPath bezierPathWithRoundedRect:view.bounds cornerRadius:view.bounds.size.width/2.0].CGPath;
view.layer.mask = maskLayer;
}
**注意:當(dāng)然下面兩個(gè)方法也可以生成圓角瓢剿,但是會(huì)產(chǎn)生離屏渲染,產(chǎn)出性能問題悠轩,故不推薦使用间狂。
self.view.layer.masksToBounds = YES;
self.view.layer.cornerRadius = 5;
b.基本寫法,代碼必須放在Begin和Commit之間:
[UIView beginAnimations:@"LoadingAnimation" context:nil];
[UIView setAnimationDelegate:self];
[UIView setAnimationDuration:0.5];
[UIView setAnimationRepeatAutoreverses:YES];
[UIView setAnimationRepeatCount:MAXFLOAT];
//通過
self.blueView.transform = CGAffineTransformMakeScale(5/3.0, 5/3.0);
self.blueView.center = CGPointMake(25, 25);
self.greenView.transform = CGAffineTransformMakeScale(0.6, 0.6);
self.greenView.center = CGPointMake(65, 25);
[UIView setAnimationDidStopSelector:@selector(animationDidStop:finished:context:)];
[UIView commitAnimations];
c.動(dòng)畫結(jié)束時(shí)候通過代理方法恢復(fù)至原始的視圖transform和center
-(void) animationDidStop:(NSString *)animationID finished:(NSNumber *)finished context:(void *)context
{
_blueView.center = blueCenter;
_blueView.transform = blueTransform;
_greenView.center = greenCenter;
_greenView.transform =greenTransform;
}
github地址 https://github.com/524429264/LoadingAnimation.git
掃描下方二維碼關(guān)注我
在此感謝各位讀者的來訪火架,您的關(guān)注是我寫作分享的最大動(dòng)力鉴象。