すべてのにボタンがありますUICellViews
。これらのボタンを押すと、いくつかのアクションが実行されます。今までうまくいっています。
画面の表示領域を基準にして、これらのボタンの1つの位置を取得するにはどうすればよいですか?それを達成する方法について何かアイデア(またはチュートリアル)はありますか?
すべてのにボタンがありますUICellViews
。これらのボタンを押すと、いくつかのアクションが実行されます。今までうまくいっています。
画面の表示領域を基準にして、これらのボタンの1つの位置を取得するにはどうすればよいですか?それを達成する方法について何かアイデア(またはチュートリアル)はありますか?
のメソッド-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クラスリファレンスを参照してください。