检查子视图中的点是否在父视图中

时间:2013-03-27 02:35:51

标签: iphone ios cocoa-touch uiview

我有以下设置:

enter image description here

如果浅蓝色视图(我称之为parentView)有一个名为childView的矩形子视图(紫色视图)。用户可以使用平移触摸来旋转和拉伸childView,方法是将手指放在红点所显示的点上并推动或拉动它。

childView有可能缩小到足以使用户完成其触摸后,红点表示的点将位于parentView内。

我的目标是创建一个方法,可以检测红点是否在parentView中。我写了以下代码:

CGPoint childViewRedPoint = CGPointMake(self.bounds.size.width, self.bounds.size.height / 2);
CGPoint rotatedChildViewRedPoint = CGPointApplyAffineTransform(childViewRedPoint, CGAffineTransformMakeRotation(self.rotateAngle));
CGPoint convertedChildViewRedPoint = [self convertPoint:rotatedChildViewRedPoint toView:self.superview];

if (CGRectContainsPoint(self.superview.bounds, convertedChildViewRedPoint))
{
    return YES;
}
else
{
    return NO;
}

首先我发现childView中定义的红点,然后我按照视图旋转的量旋转它,然后我将其转换为parentViews坐标。

我得到的要点似乎没有意义,这是行不通的。想知道是否有人知道我在哪里错了?我不考虑使用parentViews superview吗?

1 个答案:

答案 0 :(得分:3)

我不是百分百肯定,但我认为convertPoint:已经考虑轮换(或任何其他转换),因此您只需要:

CGPoint childViewRedPoint = CGPointMake(self.bounds.size.width, self.bounds.size.height / 2);
CGPoint convertedChildViewRedPoint = [self convertPoint:childViewRedPoint toView:self.superview];

if (CGRectContainsPoint(self.superview.bounds, convertedChildViewRedPoint))
...