我在所有的UICellViews
. 按下这些按钮时,会触发一些操作。到目前为止,一切都很好。
如何获取这些按钮之一相对于屏幕上可见区域的位置?您对如何实现这一目标有任何想法(或教程)吗?
我在所有的UICellViews
. 按下这些按钮时,会触发一些操作。到目前为止,一切都很好。
如何获取这些按钮之一相对于屏幕上可见区域的位置?您对如何实现这一目标有任何想法(或教程)吗?
可以使用的方法-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
}
您可以使用frame
视图的属性来获取其相对于其父视图的位置:
CGRect frame = someView.frame;
CGPoint topLeftCorner = frame.origin;
如果这还不够(即您想要获取相对于任何其他视图的视图框架,而不仅仅是其父视图),您可以使用各种转换方法:
CGRect relativeFrame = [view convertRect:view.bounds toView:anotherView];
有关更多信息,请参阅UIView 类参考。