四 iOS之图层的定位点和锚点
来源:互联网 发布:php 短信api 编辑:程序博客网 时间:2024/05/22 07:24
position和archorPoint
- CALayer有两个重要的属性:position和archorPoint
@property CGPoint position;
- 用来设置CALayer在父层中的位置
- 以父层的左上角为原点(0,0)
@property CGPoint archorPoint;
- 称为“锚点”
- 决定着CALayer身上的哪个点会在position属性所指的位置
- 以自己的左上角为原点
- 它的x、y取值范围都是0~1,默认值为(0.5,0.5)
示例演示 : 时钟
示例图
- 在storyboard中拖入一个UIImageView,设置时钟的图片,在内部绘制3个指针
- 核心代码 ViewController.m
#import "ViewController.h"//时钟的宽度#define kClockW _clockView.bounds.size.width#define angle2radion(angle) ((angle) / 180.0 * M_PI)//一小时时针转30度#define perHourA 30//每分钟时针旋转0.5˚#define perMinHourA 0.5@interface ViewController ()@property (weak, nonatomic) IBOutlet UIImageView *clockView;/**秒针Layer*/@property(nonatomic,weak)CALayer * secondLayer;/**分针Layer*/@property(nonatomic,weak)CALayer * minuteLayer;/**时针Layer*/@property(nonatomic,weak)CALayer * hourLayer;@end@implementation ViewController- (void)viewDidLoad { [super viewDidLoad]; //添加时针 [self setUpHourLayer]; //添加分针 [self setUpMinuteLayer]; //添加秒针 [self setUpSecondLayer]; //添加定时器 [NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(timeChange) userInfo:nil repeats:YES]; [self timeChange];}/*************/-(void)timeChange{ NSLog(@"%s",__func__); //获取当前日历对象 NSCalendar * calendar = [NSCalendar currentCalendar]; //获取日期的组件 //components: 需要获取的日期组件 //fromDate:获取哪个日期的组件 NSDateComponents *cmp = [calendar components:NSCalendarUnitSecond | NSCalendarUnitMinute | NSCalendarUnitHour fromDate:[NSDate date]]; //获取秒 NSInteger second = cmp.second; //获取分 NSInteger minute = cmp.minute; //获取小时 NSInteger hour = cmp.hour; //计算秒针旋转多少度 CGFloat secondA = second * 6; //计算分针旋转多少度 CGFloat minuteA = minute * 6; //计算时针旋转多少度 CGFloat hourA = hour * perHourA + minute * perMinHourA; //旋转秒针 _secondLayer.transform = CATransform3DMakeRotation(angle2radion(secondA), 0, 0, 1); //旋转分针 _minuteLayer.transform = CATransform3DMakeRotation(angle2radion(minuteA), 0, 0, 1); //旋转时针 _hourLayer.transform = CATransform3DMakeRotation(angle2radion(hourA), 0, 0, 1);}#pragma mark - 添加秒针-(void)setUpSecondLayer{ CALayer *secondL = [CALayer layer]; secondL.backgroundColor = [UIColor redColor].CGColor; //设置锚点 secondL.anchorPoint = CGPointMake(0.5, 1); //位置 secondL.position = CGPointMake(kClockW * 0.5, kClockW * 0.5); secondL.bounds = CGRectMake(0, 0, 2, kClockW * 0.5 - 20); [_clockView.layer addSublayer:secondL]; _secondLayer = secondL;}#pragma mark - 添加分针-(void)setUpMinuteLayer{ CALayer * layer = [CALayer layer]; layer.backgroundColor = [UIColor blackColor].CGColor; //设置锚点 layer.anchorPoint = CGPointMake(0.5, 1); layer.position = CGPointMake(kClockW * 0.5, kClockW * 0.5); layer.bounds = CGRectMake(0, 0, 4, kClockW * 0.5 -20); layer.cornerRadius = 2; [_clockView.layer addSublayer:layer]; _minuteLayer = layer;}#pragma mark - 添加时针-(void)setUpHourLayer{ CALayer * layer = [CALayer layer]; layer.backgroundColor = [UIColor blackColor].CGColor; //设置锚点 layer.anchorPoint = CGPointMake(0.5, 1); layer.position = CGPointMake(kClockW * 0.5, kClockW * 0.5); layer.bounds = CGRectMake(0, 0, 4, kClockW * 0.5 -40); layer.cornerRadius = 2; [_clockView.layer addSublayer:layer]; _hourLayer = layer;}@end
github demo:ClockDemo
阅读全文
0 0
- 四 iOS之图层的定位点和锚点
- 【iOS开发-图层】创建图层,位置,锚点
- 锚点定位和值
- 优雅的锚点定位
- IOS去除百度地图定位后的蓝色圆圈和定位蓝点(精度圈)
- PS图层混合算法之四(亮光, 点光, 线性光, 实色混合)
- iOS CoreAnimation(四) anchorPoint锚点是什么
- iOS -- CALayer之锚点
- 一个可以锚点定位的 ImageView(根据像素点)
- js锚点定位
- js锚点定位
- 锚点定位
- html 锚点定位
- web 锚点定位
- 锚点定位
- 锚点定位
- jquery锚点定位
- jquery锚点定位
- IRC扫盲——你可以不会玩QQ,但不能不会IRC!
- 使用TortoiseGit操作分支的创建与合并
- 小白的python之路 Day1
- 上传maven到私服
- Mybatis源码阅读之SqlSession创建
- 四 iOS之图层的定位点和锚点
- 神经网络与深度学习学习笔记:神经网络的优化
- memcached状态分析
- scrapy setting一些简单的配置
- mysql数据库 用代码建表
- Java中基本数据类型和引用数据类型的存放位置
- java 几种加载驱动的方法
- GYM
- apk安装出现闪退java.lang.RuntimeException: Unable to instantiate application