IOS开发入门之iOS学习笔记-074.CALayer04——隐式动画
凌雪 2018-11-12 来源 :网络 阅读 1120 评论 0

摘要:本文将带你了解IOS开发入门iOS学习笔记-074.CALayer04——隐式动画,希望本文对大家学IOS有所帮助。

本文将带你了解IOS开发入门iOS学习笔记-074.CALayer04——隐式动画,希望本文对大家学IOS有所帮助。


       

CALayer04——隐式动画

一、基本介绍

 

每一个UIView内部都默认关联着一个CALayer,我们可用称这个Layer为Root   Layer(根层)

所有的非Root Layer,也就是手动创建的CALayer对象,都存在着隐式动画

什么是隐式动画?
当对非Root   Layer的部分属性进行修改时,默认会自动产生一些动画效果
而这些属性称为Animatable   Properties(可动画属性)


   

列举几个常见的Animatable   Properties:

 

bounds:用于设置CALayer的宽度和高度。修改这个属性会产生缩放动画

 

backgroundColor:用于设置CALayer的背景色。修改这个属性会产生背景色的渐变动画

 

position:用于设置CALayer的位置。修改这个属性会产生平移动画

   

可以通过动画事务(CATransaction)关闭默认的隐式动画效果


   

[CATransaction begin];

[CATransaction   setDisableActions:YES];

//[CATransaction   setAnimationDuration:5];

self.myview.layer.position = CGPointMake(10, 10);

[CATransaction   commit];

   

二、时钟案例

2.1 需要完成的效果图

2.2   代码




//

//    ViewController.m

//    03_UIView67_时钟

//

//    Created by 杞文明 on 17/6/11.

//  Copyright ? 2017年 杞文明. All rights   reserved.

//

 

#import "ViewController.h"

 

//每一秒旋转的度数

#define perSecA 6

 

//每一分旋转的度数

#define perMinA 6

 

//每一小时旋转的度数

#define   perHourA 30

 

//每一分,时针旋转的度数

#define perMinHour 0.5

 

 

#define   angle2Rad(angle) ((angle) / 180.0 *   M_PI)

 

@interface ViewController ()

@property (weak, nonatomic) IBOutlet UIImageView   *clockView;

 

/** 当前的秒针   */

@property (nonatomic, weak)   CALayer   *secL;

/** 当前的分针   */

@property (nonatomic, weak)   CALayer   *minL;

/** 当前的针针   */

@property (nonatomic, weak)   CALayer   *hourL;

 

@end

 

@implementation ViewController

 

- (void)viewDidLoad {

    [super viewDidLoad];

 

    [self   initHourPointer];

    [self   initMinPointer];

    [self   initSecPointer];

 

    //创建定时器

    [NSTimer   scheduledTimerWithTimeInterval:1 target:self   selector:@selector(timeChange) userInfo:nil   repeats:YES];

 

    [self timeChange];

}

 

//初始化时针

-(void)initHourPointer{

    _hourL = [self   createPointer:CGSizeMake(4,   50) withColor:[UIColor   blueColor]];

}

 

//初始化分针

-(void)initMinPointer{

    _minL = [self   createPointer:CGSizeMake(3,   70) withColor:[UIColor   blackColor]];

}

 

//初始化秒针

-(void)initSecPointer{

    _secL = [self   createPointer:CGSizeMake(1,   80) withColor:[UIColor   redColor]];

}

 

//创建指针

-(CALayer*)createPointer:(CGSize)size  withColor:   (UIColor*) backColor{

    CALayer * pointer = [CALayer layer];

    pointer.bounds = CGRectMake(0, 0,   size.width, size.height);

    pointer.backgroundColor = backColor.CGColor;

    pointer.anchorPoint = CGPointMake(0.5, 0.9);

    pointer.position =   CGPointMake(_clockView.bounds.size.width*0.5, _clockView.bounds.size.height*0.5);

    [_clockView.layer addSublayer:pointer];

    return pointer;

}

 

//时间改变

-(void)timeChange{

    //获取时间

    NSCalendar *cal = [NSCalendar   currentCalendar];

    NSDateComponents *cmp = [cal   components:(NSCalendarUnitHour|NSCalendarUnitMinute|NSCalendarUnitSecond)   fromDate:[NSDate date]];

    NSInteger curSec =   cmp.second;

    NSInteger curMin =   cmp.minute;

    NSInteger curHour =   cmp.hour;

 

    NSLog(@"                      %ld : %ld : %ld",curHour,curMin,curSec);

 

    //计算秒针的位置

    CGFloat secA = curSec *   perSecA;

    _secL.transform =   CATransform3DMakeRotation(angle2Rad(secA), 0, 0,   1);

 

    //计算分钟位置

    CGFloat minA = curMin *   perMinA;

    _minL.transform = CATransform3DMakeRotation(angle2Rad(minA),   0, 0,   1);

 

    //计算时钟位置

    CGFloat hourA = curHour * perHourA + curMin *   perMinHour;

    _hourL.transform =   CATransform3DMakeRotation(angle2Rad(hourA), 0,   0, 1);

}

 

@end

   

    

本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注职坐标移动开发之IOS频道!

本文由 @凌雪 发布于职坐标。未经许可,禁止转载。
喜欢 | 0 不喜欢 | 0
看完这篇文章有何感觉?已经有0人表态,0%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程