iOS开发 UI--动画



#import "ViewController.h"

@interface ViewController ()
@property (nonatomic,strong)UIView *myView;

//转场动画 切换的视图
@property (nonatomic,strong)UIView *firstView;
@property (nonatomic,strong)UIView *secondView;
//转场动画 标记是否正在进行动画
@property (nonatomic,assign)BOOL isAnimating;

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    
    /*
动画:1.UIView自带动画效果
     2.Layer层动画
     3.CGAffineTransform2D变换
     4.核心动画

     */
    
    self.myView = [[UIView alloc] initWithFrame:CGRectMake(100, 100, 100, 100)];
    self.myView.backgroundColor = [UIColor cyanColor];
    //圆角
//    self.myView.layer.cornerRadius =50;
//    self.myView.layer.masksToBounds = YES;
    [self.view addSubview:self.myView];
    
    //CAAnimation
//    self.myView.layer.position =CGPointMake(0, 0);
//    self.myView.layer.anchorPoint = CGPointMake(0,0);
    
    
    
//      Layer   图层
   /* CALayer *layer = [[CALayer alloc] init];
    //
    layer.frame = CGRectMake(150, 300, 80, 80);
    layer.backgroundColor = [UIColor yellowColor].CGColor;
    //layer的属性
    //layer.masksToBounds = YES;
    layer.cornerRadius = 40;
    //阴影
    layer.shadowColor = [UIColor redColor].CGColor;
    //偏移量
    layer.shadowOffset = CGSizeMake(10, 10);
   //透明程度
    layer.shadowOpacity = 1;
    //雨化效果
    layer.shadowRadius = 30;
    //锚点和位置
    layer.position = CGPointMake(100, 200);//位置,将锚点对应的指定的点上
    layer.anchorPoint = CGPointMake(0, 0);//锚点,基准点,旋转和缩放以该点为基准点
    
    [self.view.layer addSublayer:layer];;
  */
    
//转场动画  初始化两个视图
/* self.firstView = [[UIView alloc] init];
    self.firstView.frame = self.myView.bounds;
    self.firstView.backgroundColor = [UIColor blueColor];
    [self.myView addSubview:self.firstView];
    
    self.secondView = [[UIView alloc] init];
    self.secondView.frame = self.myView.bounds;
    self.secondView.backgroundColor = [UIColor yellowColor];//不添加在myView上
    */
    






}

-(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{
#pragma mark       UIView动画 ---属性动画
    /*
    [UIView beginAnimations:@"属性动画" context:nil];
     [UIView setAnimationDuration:0.1];
     // 颜色的变换会有渐变的效果
     self.myView.backgroundColor = [UIColor colorWithRed:arc4random()%256/255.0 green:arc4random()%256/255.0 blue:arc4random()%256/255.0 alpha:1];
     
     // 大小的变化 会有一个大小的过度
     //    self.myView.frame = CGRectMake(self.myView.frame.origin.x, self.myView.frame.origin.y, self.myView.frame.size.width * 1.2, self.myView.frame.size.height * 1.2);
     
     // 抖动
     CGPoint p = self.view.center;
     self.view.frame = CGRectMake(self.view.frame.origin.x + 20, self.view.frame.origin.y, self.view.frame.size.width, self.view.frame.size.height);
     self.view.frame = CGRectMake(self.view.frame.origin.x + 20, self.view.frame.origin.y, self.view.frame.size.width, self.view.frame.size.height);
 
     [UIView setAnimationRepeatCount:10];//动画重复的次数
     self.view.center = p;
     [UIView commitAnimations];//提交动画
     
     //    [UIView beginAnimations:@"1" context:nil];
     //    [UIView setAnimationRepeatCount:99.5];
     //    self.view.center = p;
     //    [UIView commitAnimations];
     
     
     // 设置是否有路径回退效果
     //    [UIView setAnimationRepeatAutoreverses:YES];
     // 设置重复次数
     //    [UIView setAnimationRepeatCount:99.5];
     
     // 位置的变换会有一个位置的平移效果
     //    self.myView.center = CGPointMake(arc4random() % 275 + 50, arc4random() % 636 + 50);
     
     //    [UIView commitAnimations];
    
    */
     //第二种
/*   [UIView animateWithDuration:1 animations:^{
        self.myView.backgroundColor = [UIColor colorWithRed:arc4random()%256/255.0 green:arc4random()%256/255.0 blue:arc4random()%256/255.0 alpha:1];
    }];
 */
    
#pragma mark       UIView动画 ---转场动画
/*
    if (!_isAnimating) {
        _isAnimating = YES;//标记正字啊进行动画
 
        [UIView transitionWithView:_myView duration:1 options:UIViewAnimationOptionTransitionFlipFromBottom animations:^{
            if (self.firstView.superview != self.myView) {
            [self.secondView removeFromSuperview];
            [self.myView addSubview:self.firstView];
            }else{
            [self.firstView removeFromSuperview];
            [self.myView addSubview:self.secondView];
        }
        } completion:^(BOOL finished) {
            _isAnimating = NO;
        }];
    }
   */
#pragma mark       Layer
/*
     Layer是图层,UIView其实是分两层的,上面一层是透明的框负责处理用户响应,下面一层是图层,负责图形的绘制
     
     */

#pragma mark       CGAffineTransform2D 仿射变换属性
    //设置动画效果
    [UIView beginAnimations:@"仿射变换" context:nil];
    //设置动画速度
    [UIView setAnimationDuration:1];
   
    //旋转
  /*  //self.myView.transform = CGAffineTransformMakeRotation(M_PI_2);
    //旋转无限次
//    CGAffineTransform transform = self.myView.transform;
//    self.myView.transform = CGAffineTransformRotate(transform, M_PI_2 * 10);
   */
    //缩放
  /*
    // self.myView.transform = CGAffineTransformMakeScale(2, 1);
    //多次缩放
    CGAffineTransform transform = self.myView.transform;
    self.myView.transform = CGAffineTransformScale(transform, 1, 1.1);
   */
    //提交动画
    [UIView commitAnimations];
    
    
    
    
#pragma mark      CAAnimation
    //1.CABaseAnimation:进行layer层的旋转
    /*
    CABasicAnimation *base = [CABasicAnimation animationWithKeyPath:@"transform.rotation"];//后面的字符串是固定的名字,读取系统的文件信息
 //持续时间
    base.duration = 50;
      //起始的角度
    base.fromValue = @(0);
     //终止的角度
    base.toValue = @(M_PI_2 * 10000);
    
    //将这个动画添加到layer上
    [self.myView.layer addAnimation:base forKey:@"base"];
    */
   
    //2.CAKeyFrameAnimation 用于颜色改变的
    /*
    CAKeyframeAnimation *key1 = [CAKeyframeAnimation animationWithKeyPath:@"backgroundColor"];
    //使用
    key1.duration =5;
    id c1 = (id)[UIColor greenColor].CGColor;
    id c2 = (id)[UIColor blackColor].CGColor;
    id c3 = (id)[UIColor yellowColor].CGColor;
    id c4 = (id)[UIColor redColor].CGColor;
    
    key1.values = @[c1,c2,c3,c4];
    //添加动画
    [self.myView.layer addAnimation:key1 forKey:@"color"];
    self.myView.backgroundColor = [UIColor blackColor];
  */
   
    //3.位置的改变
    /*
    CAKeyframeAnimation *key2 = [CAKeyframeAnimation animationWithKeyPath:@"position"];
    key2.duration = 5;
    
    NSValue *v1 = [NSValue valueWithCGPoint:CGPointMake(0, 0)];
    NSValue *v2 = [NSValue valueWithCGPoint:CGPointMake([UIScreen mainScreen].bounds.size.width - 100, 0)];
    NSValue *v3 = [NSValue valueWithCGPoint:CGPointMake([UIScreen mainScreen].bounds.size.width - 100, [UIScreen mainScreen].bounds.size.height - 100)];
    NSValue *v4 = [NSValue valueWithCGPoint:CGPointMake(0 , [UIScreen mainScreen].bounds.size.height - 100)];
    key2.values = @[v1,v2,v3,v4,v1];
    
   // [self.myView.layer addAnimation:key2 forKey:@"position"];
    */
    
    //动画组

/*
同时将多个动画分组,按组添加,
*/
    /*
    CAAnimationGroup *group = [CAAnimationGroup animation];
    group.duration = 5;
    group.animations = @[key2,key1];
    [self.myView.layer addAnimation:group forKey:@"group"];
    */
    
    //CATransition(切换特效)
    CATransition *transition = [CATransition animation];
    
    transition.duration = 1;//设置时间
    transition.type = @"pageUnCurl";//设置切换的类型
    transition.subtype = kCATransitionFromLeft;//设置切换的子类型
    [self.myView.layer addAnimation:transition forKey:@"transition"];
    
}

@end


 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值