gpt4 book ai didi

iPhone hitTest 旋转后损坏

转载 作者:行者123 更新时间:2023-12-03 19:42:48 30 4
gpt4 key购买 nike

我有一个 UIView,其中包含许多 CALayer 子类。我使用以下代码来检测触摸事件对应于哪一层:

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
UITouch *touch = [touches anyObject];
CGPoint touchPoint = [touch locationInView:self];
NSLog(@"%@,%@",NSStringFromCGPoint(point),[self.layer hitTest:point].name);


}

在设备旋转之前,此功能可以正常工作。当设备旋转时,所有当前图层都会从 super 图层中删除,并创建新的 CALayers 以适应新的方向。新图层已正确插入并可以在正确的方向查看。

旋转后,hitTest 方法始终为图层返回 null。我注意到,当旋转 180 度时,返回的图层是旋转之前所在位置的图层,即,触摸左上图层会在旋转 180 度时给出右下图层。 HitTest 的坐标按预期打印,(0,0) 位于左上角。我每次旋转都会重新绘制图层,但由于某种原因,它们似乎被映射为“正确”的向上方向,主页按钮位于底部。在处理旋转后我是否错过了函数调用或其他内容?

干杯,亚当

最佳答案

好的,我发现以下代码可以在所有方向上运行,没有任何问题(就我而言,没有重叠 View ,因此这适合我):

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
UITouch *t = [touches anyObject];

CGPoint point = [t locationInView:self];

for(CALayer *layer in self.layer.sublayers) {

CGPoint convertedPoint = [self.layer convertPoint:point
toLayer:layer];

if([layer containsPoint:convertedPointPoint]) {
NSLog(@"%@",layer.name);
}
}
}

虽然此手动点转换工作正常,但问题仍然在于为什么原始方法调用不能正常工作。有人可以启发我吗?

亚当

关于iPhone hitTest 旋转后损坏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2575689/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com