CALayer anchorPoint 锚点始终为(0,0)

objc.io 学习 摘自原处修改

对层的属性详细了解可见这里

@interface ClockFace : CAShapeLayer
@property (nonatomic, strong) NSDate *time;
@end

@interface ClockFace ()
@property (nonatomic, strong) CAShapeLayer *hourHand;
@property (nonatomic, strong) CAShapeLayer *minuteHand;
@end

@implementation ClockFace
- (instancetype)init {
    if (self = [super init]) {
        self.backgroundColor = [UIColor grayColor].CGColor;
        self.bounds = CGRectMake(0, 0, 200, 200);
        self.position = CGPointMake(520, 150);
        self.path = [UIBezierPath bezierPathWithOvalInRect:self.bounds].CGPath;
//        self.anchorPoint = CGPointMake(0, 0);
        self.fillColor = [UIColor whiteColor].CGColor;
        self.strokeColor = [UIColor blackColor].CGColor;
        self.lineWidth = 4;
        
        self.hourHand = [CAShapeLayer layer];
        self.hourHand.bounds = CGRectMake(0, 0, 4, 70);//若未设置bounds,anchorPoint实际指向始终为{0,0}代表左上角;默认为{0.5,0.5}代表中心点随着position属性偏移
        self.hourHand.path = [UIBezierPath bezierPathWithRect:self.hourHand.bounds].CGPath;
        self.hourHand.lineWidth = .5f;
        self.hourHand.strokeColor = [UIColor blackColor].CGColor;
        self.hourHand.fillColor = [UIColor yellowColor].CGColor;
        self.hourHand.anchorPoint = CGPointMake(1, 1);
        self.hourHand.position = CGPointMake(102, 100);
        [self addSublayer:self.hourHand];
        
        self.minuteHand = [CAShapeLayer layer];
        self.minuteHand.bounds = CGRectMake(0, 0, 2, 90);
        self.minuteHand.path = [UIBezierPath bezierPathWithRect:self.minuteHand.bounds].CGPath;
        self.minuteHand.lineWidth = .5f;
        self.minuteHand.strokeColor = [UIColor blackColor].CGColor;
        self.minuteHand.fillColor = [UIColor yellowColor].CGColor;
        self.minuteHand.anchorPoint = CGPointMake(1, 1);
        self.minuteHand.position = CGPointMake(101, 100);
        [self addSublayer:self.minuteHand];
    }
    return self;
}

- (void)setTime:(NSDate *)time {
    _time = time;
    
    NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSCalendarIdentifierGregorian];
    NSDateComponents *components = [calendar components:NSCalendarUnitHour | NSCalendarUnitMinute fromDate:time];
    self.hourHand.affineTransform = CGAffineTransformMakeRotation(components.hour / 12.0 * 2.0 * M_PI);
    self.minuteHand.affineTransform = CGAffineTransformMakeRotation(components.minute / 60.0 * 2.0 * M_PI);
}

时间: 2024-10-26 11:38:34

CALayer anchorPoint 锚点始终为(0,0)的相关文章

cocos2d-x AnchorPoint锚点

锚点是定位和变换操作的一个重点.锚点我们能够看成用一根图钉将一张纸或者相片钉在墙上的那个点. 节点的位置是由我们设置的position和anchor point一起决定的. 值得一提的是,anchor point的默认位置Layer的是左下,而其它的node是中点. 节点的原点是父节点的左下角. CCLayer* layer1 = CCLayerColor::create(ccc4(255,0,0,255), 300, 200); CCLayer* layer2 = CCLayerColor::

seajs 3.0.0 源码阅读笔记

写笔记的时候才注意到我看的源代码是 3.0.0 的,但是官方发布的最新版本是 2.3.0.相信大部分是相同的,所以先把这个记完,再看一次 2.3.0 的代码. seajs 的源代码可以在 github上获取.seajs 在文档"如何参与开发"中说明了阅读顺序,当然为了便于阅读,在了解了目录结构之后,我直接阅读了合并好的 sea-debug.js. 整个seajs采用的是2空格缩进,避免分号的写法,我不是很习惯,但不影响阅读. 文件/目录结构 文档中各个源文件所包含的内容大致如下: in

MySQL 数据库连接失败 SQLSTATE[HY000] [2003] Can't connect to MySQL server on '127.0.0.1' (13)

CentOS6.5x64 安装禅道6.2,生成配置文件,数据库连接失败 数据库连接失败 SQLSTATE[HY000] [2003] Can't connect to MySQL server on '127.0.0.1' (13) root,密码肯定没有错(命令行可以登录),用的127.0.0.1 PHP安装正常,MySQL配置正确,PHP的PDO.MySQL扩展正确,使用 <?php $link=mysql_connect('localhost','root','password'); if

CWE.Compter.Services.GSAK.8.6.0.0地图和路标管理工具

CWE.Compter.Services.GSAK.8.6.0.0地图和路标管理工具 GSAK是所有在一个地图和路标管理工具.主要功能包括:多个数据库.发送/接收路点GPSr,谷歌地图, 许多映射转换格式,PDA输出(包括CacheMate支持),HTML输出,广泛的搜索,宏的支持.备份和恢复.距离/方 向从其他锚点(包括缓存.位置.邮政编码).  QQ:16264558   电话TEL:13963782271 Mathworks.Matlab.R2016bOracle.Crystal.Ball

程序软件连接数据库无法使用127.0.0.1

今天遇到了一个朋友需要用到mssql 2008的数据库搭建的程序.这个客户程序里面需要运行一个exe文件.在连接数据库设置的时候,服务器处填写了127.0.0.1,测试连接时始终无法连接成功. 用了localhost之后就连接成功了.说明使用的localhost与127.0.0.1之间有某一地方无法通信.检查本地hosts文件发现localhost已经解析到127.0.0.1上了,那么推断问题应该就是出现在mssql 2008本身的配置上. 打开Sql Server Configuration

数据可视化-EChart2.0.0使用中遇到的2个问题

之前项目中都是使用FusionChart和HighChart,基本都是没有购买商业许可.然后现在开发的系统需要交付给客户使用.所以现在图表控件不能直接使用FusionChart和HighChart,通过对比EChart和D3.js,EChart由百度开发,相关的中文文档和问题应该会更好.而且D3.js代码配置和选项相对于EChart也要复杂,所以团队最后决定在图表类库采用EChart. 1.漏斗图,左右斜边不是一条直线 产生原因: http://echarts.baidu.com/doc/exa

使用 IDEA 创建 Maven Web 项目 (异常)- Disconnected from the target VM, address: &#39;127.0.0.1:59770&#39;, transport: &#39;socket&#39;

运行环境: JDK 版本:1.8 Maven 版本:apache-maven-3.3.3 IDEA 版本:14 maven-jetty-plugin 配置: <plugin> <groupId>org.eclipse.jetty</groupId> <artifactId>jetty-maven-plugin</artifactId> <configuration> <webAppSourceDirectory>${pro

云计算与虚拟化的区别0.0

1.传统数据中心面临的问题 在讲云计算和虚拟化之前,在没有云计算之前我们传统统数据中心面临的问题. 1.1.传统IDC托管 买台机器-放到IDC-安装系统-部署应用-买个域名-绑定上去-对外访问-ICP备案-ICP证(电子商务)-文网文(文化部备案)--公安局备案-接入备案(机房接入备案,备案现在机房管 ) 注销备案 -- 各种坑 北京不支持个人备案转公司备案. 域名转让(官方要求最多72小时)坑 72小时中有可能会出现 两方都给停了的风险. 一般招代理去做 1.2.IDC租用 IDC连续租三年

五年磨一剑:Java 开源博客 Solo 1.0.0 发布了!

从 Solo 第一个版本发布至今,已经过去 5 年了.今天我们非常自豪地宣布,Solo 1.0.0 正式发布,感谢一直以来关注 B3log 开源的朋友! 目前 B3log 开源有三款产品: GitHub 上 Star 数最多的 Java 博客 Solo Golang 黑科技之在线 IDE Wide 基于实时交互技术的社区 Sym 特性 基于标签的文章分类 博客/标签 Atom/RSS.Sitemap 输出 评论回复及邮件提醒 自定义页面.导航 多编辑器:Markdown.TinyMCE.Kind