美文网首页动画
iOS Core Animation(五)- 隐式动画

iOS Core Animation(五)- 隐式动画

作者: 莫须有恋 | 来源:发表于2016-12-16 17:28 被阅读72次
    CATransaction事务

    动画执行的时间取决于当前事务的设置,动画类型取决于图层行为

    • begin 入栈([CATransaction setDisableActions:YES];)
    • commit 出栈
    • setAnimationDuration 设置当前事务的动画时间(默认0.25秒)
    • setCompletionBlock 添加动画完成的代码块
        [CATransaction begin];
        [CATransaction setAnimationDuration:1.0];
        [CATransaction setCompletionBlock:^{
            CGAffineTransform transform = self.colorLayer.affineTransform;
            transform = CGAffineTransformRotate(transform, M_PI_2);
            self.colorLayer.affineTransform = transform;
        }];
        CGFloat red = arc4random() / (CGFloat)INT_MAX;
        CGFloat green = arc4random() / (CGFloat)INT_MAX;
        CGFloat blue = arc4random() / (CGFloat)INT_MAX;
        self.colorLayer.backgroundColor = [UIColor colorWithRed:red
                                                          green:green
                                                           blue:blue
                                                          alpha:1.0].CGColor;
        [CATransaction commit];
    
    • UIView关联的图层禁用了隐式动画,对图层做动画的唯一方法就是使用UIView的动画函数([UIView beginAnimations:nil context:nil];[UIView commitAnimations];)或者继承UIView,覆盖-actionForLayer:forKey:方法,或者使用显示动画。(可直接使用方法:+animateWithDuration:animations:)
        [UIView beginAnimations:nil context:nil];
        [UIView setAnimationDuration:1];
        CGFloat red = arc4random() / (CGFloat)INT_MAX;
        CGFloat green = arc4random() / (CGFloat)INT_MAX;
        CGFloat blue = arc4random() / (CGFloat)INT_MAX;
        self.colorLayer.backgroundColor = [UIColor colorWithRed:red
                                                          green:green
                                                           blue:blue
                                                          alpha:1.0].CGColor;
        [UIView commitAnimations];
    
    • 对于单独存在的图层,我们可以通过实现图层的actionForLayer:forKey:委托方法,或者提供一个actions字典来控制隐式动画(CATransition推进过渡)
        self.colorLayer = [CALayer layer];
        self.colorLayer.frame = CGRectMake(50.0f, 50.0f, 100.0f, 100.0f);
        self.colorLayer.backgroundColor = [UIColor blueColor].CGColor;
        CATransition *transition = [CATransition animation];
        transition.type = kCATransitionPush;
        transition.subtype = kCATransitionFromLeft;
        self.colorLayer.actions = @{@"backgroundColor": transition};
        [self.layerView.layer addSublayer:self.colorLayer];
    
    • 呈现图层 presentationLayer
      呈现图层实际是对模型图层的复制,它的属性值代表任何指定时刻的当前外观效果,即你可以通过呈现图层的值来获取当前屏幕上真正显示的值
      实现基于定时器的动画,可以通过呈现图层获取某一时刻的图层位置
      如果想让做动画的图层响应用户输入,可以使用呈现图层调用-hitTest:判断是否被点击

    上一篇:iOS Core Animation(四)
    下一篇:iOS Core Animation(六)

    相关文章

      网友评论

        本文标题:iOS Core Animation(五)- 隐式动画

        本文链接:https://www.haomeiwen.com/subject/otknmttx.html