我在所有的UICellViews
都有按鈕。當按下這些按鈕時,會觸發一些操作。直到現在,事情一直很好。如何獲取UITable中的UIButton或UILabel的位置?
我怎樣才能得到這些按鈕之一相對於屏幕上的可見區域的位置?你有什麼想法(或教程)如何實現?
我在所有的UICellViews
都有按鈕。當按下這些按鈕時,會觸發一些操作。直到現在,事情一直很好。如何獲取UITable中的UIButton或UILabel的位置?
我怎樣才能得到這些按鈕之一相對於屏幕上的可見區域的位置?你有什麼想法(或教程)如何實現?
您可以使用UIView
的方法-convertRect:toView:
。
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
}
所以我用這個來獲取在uview中的tableview中按鈕的確切位置:CGRect rex = [button convertRect:button.bounds fromView:self.tableView.superview]; –
@user - 你可能是指'toView'而不是'fromView'。 – sch
順便說一下,座標是負數,除非一個按鈕向上滾動,所以它的原點在屏幕上部 –
您可以使用視圖的frame
屬性來獲取相對於它的父自己的立場:
CGRect frame = someView.frame;
CGPoint topLeftCorner = frame.origin;
如果這還不夠(即你想獲得相對於任何其他視圖的視圖框架,而不僅僅是其超視圖),可以使用各種轉換方法:
CGRect relativeFrame = [view convertRect:view.bounds toView:anotherView];
有關詳細信息,請參閱UIView class reference。
當你說*「相對於屏幕上的可見區域」*時,是指相對於窗口嗎? – sch
是呀這就是我的意思 –