我有 Controller ,使用 CAKeyframeAnimation
随机掉落大量图片我应该通过触摸轨道来裁剪这些图像,
任何使用 CALayer
的动画为了呈现动画图像,我正在尝试使用 [layer presentationLayer]
检测该层内的触摸事件.
问题是 - 为了裁剪这个图像,我应该从我的触摸跟踪器段和层创建路径,我还不知道如何创建这些路径,但这里的问题是如何在下降时检测这个接触点 CALayer
坐标系,附图更详细。
有任何想法吗?
为了检测与 Controller 坐标系相关的层中的触摸点,我正在使用以下代码:
- (void) touchesMoved:(NSSet *)touches :(CGPoint) movingPoint :(UIEvent *)event
{
NSArray *layers = [[contextView layer] sublayers];
for (CALayer *layer in layers) {
CGRect imageRect = [[layer presentationLayer] frame];
if(CGRectContainsPoint(imageRect, movingPoint)) {
NSLog(@"Image position - x %f y %f", movingPoint.x, movingPoint.y);
}
}
}
最佳答案
您可能知道,您接收到的点位于 View 的坐标系中,通常应该与 View 的主层的坐标系相同。 (如果没有,仍然有方法可以转换它,但除非你做了一些奇怪的事情,否则仅仅依靠这些是相同的事实会更容易。)
同样重要的是要知道,一旦您开始旋转某些东西,它的 frame
未定义。如果您稍微考虑一下框架的工作原理,就会很明显为什么会出现这种情况(您不能使用未旋转的矩形来定义钻石)。
我们可以使用 convertPoint:fromLayer:
轻松地从一个系统转换到另一个系统。 .没有touchesMoved:movingPoint:
iOS 中的方法,所以我假设这是一些自定义方法,您已经在自己的坐标系中计算了点。所以你想要这样的东西:
CGPoint pointInLayer = [[layer presentationLayer] convertPoint:movingPoint fromLayer:self.view.layer];
CGRect layerBounds = [[layer presentationLayer] bounds];
if (CGRectContainsPoint(layerBounds, pointInLayer)) {
// Intersect!
}
边界总是被定义的,因为它们总是在图层自己的坐标系中。所以我们把这个点转换成图层的坐标系,并询问这个点是否存在于它的边界内。
关于ios - 在 CALayer 的坐标系中检测触摸事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34964065/