有一些方法可以将CGPoint从一个UIView转移到另一个UIView,从一个CALayer转移到另一个.我找不到将CGPoint从UIView的坐标系更改为CALayer坐标系的方法.
图层及其主视图是否具有相同的坐标系?我需要在它们之间转换点吗?
谢谢,科里
[编辑]
谢谢你的回答!很难找到有关iPhone和Mac上CA之间差异/相似性的信息.我很惊讶我发现在任何Apple文档中都没有直接解决这个问题.
我正在寻求这个答案,以帮助解决我正在排除故障的错误,这是我最好的猜测,但我想我正在咆哮错误的树.如果坐标系是相同的,那么我有另一个问题......
我可以在Stack Overflow上找到我遇到的实际问题: 图层命中测试仅在触摸图层的下半部分时返回图层
hitTest的文档说:
/* Returns the farthest descendant of the layer containing point 'p'. * Siblings are searched in top-to-bottom order. 'p' is in the * coordinate system of the receiver's superlayer. */
所以你需要做(像这样):
CGPoint thePoint = [touch locationInView:self]; thePoint = [self.layer convertPoint:thePoint toLayer:self.layer.superlayer]; CALayer *theLayer = [self.layer hitTest:thePoint];
在Apple文档方面,我在《核心动画编程指南》(2008-11-13)的“层坐标系统”部分中找到了“ iPhone OS Note” 。
UIView实例的默认根层使用与UIView实例的默认坐标系匹配的翻转坐标系-原点位于左上角,而值则向右下方递增。通过实例化CALayer创建的图层直接使用标准的Core Animation坐标系。