1

我在所有的UICellViews. 按下这些按钮时,会触发一些操作。到目前为止,一切都很好。

如何获取这些按钮之一相对于屏幕上可见区域的位置?您对如何实现这一目标有任何想法(或教程)吗?

4

2 回答 2

6

可以使用的方法-convertRect:toView:UIView

CGRect frameInWindow = [button convertRect:button.bounds toView:viewController.view];

这是一个小测试:

- (void)loadView
{
    [super loadView];

    self.view = [[UIView alloc] initWithFrame:[UIScreen mainScreen].applicationFrame];

    UIView *parentView = [[UIView alloc] initWithFrame:CGRectMake(100, 100, 300, 300)];
    [self.view addSubview:parentView];

    UIView *childView = [[UIView alloc] initWithFrame:CGRectMake(100, 100, 100, 100)];
    [parentView addSubview:childView];

    CGRect rect1 = [childView convertRect:childView.bounds toView:self.view];
    // 200, 200, 100, 100 => correct

    // Other tests for the discussion of @H2CO3's answer.

    CGRect rect2 = [childView.superview convertRect:childView.frame toView:self.view];
    // 200, 200, 100, 100 => correct
    CGRect rect3 = [childView convertRect:childView.frame toView:self.view];
    // 300, 300, 100, 100 => wrong
}
于 2012-09-02T18:05:04.603 回答
2

您可以使用frame视图的属性来获取其相对于其父视图的位置:

CGRect frame = someView.frame;
CGPoint topLeftCorner = frame.origin;

如果这还不够(即您想要获取相对于任何其他视图的视图框架,而不仅仅是其父视图),您可以使用各种转换方法:

CGRect relativeFrame = [view convertRect:view.bounds toView:anotherView];

有关更多信息,请参阅UIView 类参考

于 2012-09-02T18:05:12.087 回答