iOS动画--UIView自带动画效果、Block动画

UIView自带动画


   UIView *view1=[[UIView alloc] initWithFrame:CGRectMake(20, 20, 200, 200)];

    view1.tag=100;

    view1.backgroundColor=[UIColor orangeColor];

    [self.window addSubview:view1];

    

    //打开动画

    [UIView beginAnimations:nil context:Nil];

    //设置动画总时间

    [UIView setAnimationDuration:5];

    

    //设置动画开始和结束减速

    [UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];

    

    

    //设置过滤效果,第二个参数填写父视图的View

    [UIView setAnimationTransition:UIViewAnimationTransitionCurlUp forView:self.window cache:YES];

    

    view1.backgroundColor=[UIColor blueColor];

    view1.frame=CGRectMake(20, 100, 200, 200);

    

    //设置代理

    [UIView setAnimationDelegate:self];

    //设置动画完成后调用的方法

    [UIView setAnimationDidStopSelector:@selector(stopAnimate)];

    

    /******************************/

    /*

      UIView自带动画实际是在程序运行的进程中,有主线程创建了

     一个副线程,由这个副线程来完成动画。上述设置动画完成后调用的方法,

     其实质就是使用了代理的回调。(代理的作用就是 正向传值 反向传值)

     回调就是反向传值。因为主线程并不知道副线程什么时候完成动画,所以副线程成为了委托方,主线程成为了代理方。当动画完成后,会调用副线程中协议中的AnimationDidStop,而主线程中在实现这个方法中调用了一个新的方法来处理数据。( [UIView setAnimationDidStopSelector:@selector(stopAnimate)];就是在主线程中设置了一个新的方法,来处理数据。)

     

     实际开发中使用最多的时候,还是代理回调,比如 副线程去下载图片,主线程获取图片,然后再处理图片数据

     

     当然回调这个感念并不是OC中第一次出现的,函数回调早在C++中就早已被使用,JAVA中也有,OC只是沿用了这些语言的优点。回调函数,其实和嵌入式中的定时器中端函数,很类似。生活中也常常存在这样的例子。比如:老爸叫儿子出去买瓶酱油,然后儿子出去买酱油,老爸接着洗菜,切菜,做饭(并不会停下来等儿子买完酱油再做这些事),当儿子买完酱油后,敲门,告诉老爸,酱油买回来了,然后把酱油交给老爸。老爸在往菜里加酱油(使用数据)。

     

     */

    /******************************/

    

    

    

    //提交动画

    [UIView commitAnimations];

    

    [self.window makeKeyAndVisible];

    return YES;

}

-(void)stopAnimate

{

    UIView *view=[self.window viewWithTag:100];

    //打开动画

    [UIView beginAnimations:nil context:Nil];

    //设置动画总时间

    [UIView setAnimationDuration:5];

    

    view.backgroundColor=[UIColor redColor];

    //提交动画

    [UIView commitAnimations];


}


Block动画

//    使用UIView自带动画

//    [UIView beginAnimations:Nil context:nil];

//    [UIView setAnimationDuration:1];

//    [UIView setAnimationTransition:UIViewAnimationTransitionFlipFromLeft forView:self.window cache:YES];

//    

//    [self.window exchangeSubviewAtIndex:0 withSubviewAtIndex:1]; //交换两个子视图

//    [UIView commitAnimations];

    

    //使用block动画

    //01 普通block动画

//    [UIView animateWithDuration:1 animations:^{

//        [UIView setAnimationTransition:UIViewAnimationTransitionFlipFromLeft forView:self.window cache:YES];

//        [self.window exchangeSubviewAtIndex:0 withSubviewAtIndex:1]; //交换两个子视图

//    }];

    

    //02 带有回调的block动画

//    [UIView animateWithDuration:1 animations:^{

//        [UIView setAnimationTransition:UIViewAnimationTransitionFlipFromLeft forView:self.window cache:YES];

//        [self.window exchangeSubviewAtIndex:0 withSubviewAtIndex:1]; //交换两个子视图

//        

//    } completion:^(BOOL finished){

//        NSLog(@"动画完成");

//    

//    }];

    

    //03 带有动画效果的block动画,

    

    [UIView transitionWithView:self.window duration:2.0 options:UIViewAnimationOptionTransitionCurlUp animations:^{

         [self.window exchangeSubviewAtIndex:0 withSubviewAtIndex:1]; //交换两个子视图

    } completion:^(BOOL finished) {

        

    }];



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值