注:所有的动画我都封装起来了,拿了直接用即可,简单粗暴看代码,这里可以让你知其然,知其所以然。
实现UIViewControllerTransitioningDelegate的代理方法,把present从下面出来的view从右边动画出来,具体代码看github代码,具体方法如下:
-(NSTimeInterval)transitionDuration:(id)transitionContext{ return 1.0; } -(void)animateTransition:(id)transitionContext{ }
-(id)animationControllerForPresentedController:(UIViewController *)presented presentingController:(UIViewController *)presenting sourceController:(UIViewController *)source{ return (id)[[PresentAnimation alloc]init]; }
- (NSTimeInterval)transitionDuration:(id)transitionContext{ return 1.0; } -(void)animateTransition:(id)transitionContext{ }
- (nullable id )animationControllerForDismissedController:(UIViewController *)dismissed { return (id)[[DismissAnimation alloc]init]; }
动画添加新的view,type和subType不同,动画方式就不一样。这里只写一个不累赘
+ (void)pushView:(UIView *)View subView:(UIView *)subView AndAnimationType:(NSString *)type AndsubType:(NSString *)subType{ CATransition *transition = [CATransition animation]; transition.duration = 1.0f; transition.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut]; transition.type = type; transition.subtype = subType; [View.layer addAnimation:transition forKey:@"pushTransitionAnimation"]; [View addSubview:subView]; }
关于CATransition的type和subType的介绍,前两篇博客已经介绍过,这里有github地址
动画移除新的view
+ (void)popView:(UIView *)View subView:(UIView *)subView AndAnimationType:(NSString *)type AndsubType:(NSString *)subType { CATransition *transition = [CATransition animation]; transition.duration = 1.0f; transition.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut]; transition.type = type; transition.subtype = subType; [View.superview.layer addAnimation:transition forKey:@"popTransitionAnimation"]; [subView removeFromSuperview]; }
关于CATransition的type和subType的介绍,前两篇博客已经介绍过,这里有github地址
CGAffineTransform 主要用于形变,位移和旋转,可用于动画展示
-
位移X,Y
CGAffineTransformMakeTranslation(CGFloat tx, CGFloat ty)
-
伸缩X,Y
CGAffineTransformMakeScale(CGFloat sx, CGFloat sy)
-
旋转M_PI
CGAffineTransformMakeRotation(CGFloat angle)
-
组合
CGAffineTransformConcat(CGAffineTransform t1,CGAffineTransform t2)
-
回到原位
CGAffineTransformIdentity
[UIView animateWithDuration:1.0 animations:^{
view.transform =CGAffineTransformConcat(CGAffineTransformMakeScale(scaleW, scaleH), CGAffineTransformMakeTranslation(W,H));
} completion:^(BOOL finished) {
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
view.transform = CGAffineTransformIdentity;
});
}];