确定 UIView 是否包含在屏幕边界内

Determine if UIView is contained within screens bounds

如果我有视图,如何确定其框架是否包含在可见屏幕内?

我目前有这个,但它非常粗略,一点也不健壮。

var newPoint = (this.ConvertPointFromView(new PointF(newX, newY), UIApplication.SharedApplication.KeyWindow.RootViewController.View));

if (newPoint.X + _infoBox.Frame.Width > UIApplication.SharedApplication.KeyWindow.RootViewController.View.Frame.Width
    || newPoint.Y + _infoBox.Frame.Height + _glass.Frame.Height > UIApplication.SharedApplication.KeyWindow.RootViewController.View.Frame.Height)
    {
            //.....
    }

您可以使用 CGRectContainsPoint 例程来检查一个矩形是否在另一个矩形内。

CGRect rect = yourView.frame;
BOOL flag =  CGRectContainsRect(([UIScreen mainScreen].bounds,rect);
if (flag) {
    NSLog(@"indside screen bounds");
}else{
    NSLog(@"not in screen bounds");
}

已编辑: CGRect frame = [yourView convertRect:rect fromView:nil];

要比较一个 rect 是否完全在 seconf rect 内,您可以使用 CGRectContainsRect(rect2, rect1)) 函数

像这样:CGRectContainsRect([ [UIScreen mainScreen] bounds], Infobox.frame)

我不太喜欢 swift 语法,但应该很容易转换。

编辑: 使用 convertRect 获取屏幕坐标中的信息框。传递 nil 作为 view: 参数。 [信息框 convertRect: infobox.bounds view:nil]

来自手机。