如何在其父视图坐标系中获得子视图的有效边界

Posted

技术标签:

【中文标题】如何在其父视图坐标系中获得子视图的有效边界【英文标题】:How to get effective Bounds of a subview in its parent view's co-ordinate system 【发布时间】:2012-02-25 15:05:46 【问题描述】:

在我的应用中,我允许用户通过添加箭头(自定义 ArrowView)来注释照片。可以添加许多箭头,具有各种缩放和旋转。

我正在尝试实现通过触摸选择箭头。目前,我正在迭代和使用

CGRectContainsPoint(arrowView.frame, touchPoint)

根据触摸手势决定选择哪个箭头。

但是,当一些箭头很大并旋转到 45 度时(因为框架变大),这不起作用。

问题: 我想使用转换为父坐标而不是框架的箭头边界。应用缩放和旋转时如何获得此信息?

或者,有没有更好的方法来解决这个选择问题?

【问题讨论】:

翻译成父坐标的箭头边界frame的定义。您能否发布比您发布的代码更多的代码来显示您如何定义接触点? 但框架在旋转时会变大,而边界保持不变。我想获得应用旋转的原始框架(即,矩形的边可能不平行于父视图框架的边)。这就是我所说的“箭头的边界转换为父坐标”。 【参考方案1】:

这段代码找到touchPoint下的箭头:

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event

    UITouch *touch = [touches anyObject];
    CGPoint touchPoint = [touch locationInView:self.view];
    UIView *arrow = [self.view hitTest:touchPoint withEvent:event];

【讨论】:

sch,感谢您的回答。但是,我同样使用UITapGestureRecognizer。是否可以得到对应于tapGesture的UIEvent

以上是关于如何在其父视图坐标系中获得子视图的有效边界的主要内容,如果未能解决你的问题,请参考以下文章

如何将由 NE 和 SW 坐标组成的特定边界拟合到可见地图视图中?

视图UIView的大小和位置属性详解

Android 谷歌地图获得扩展的边界坐标

设置视图的边界会改变框架的坐标,为啥?

如何在其父视图之上添加子视图中的视图?

在 iOS 的超级视图/父视图控制器中读取子元素坐标