1

すべてのにボタンがありますUICellViews。これらのボタンを押すと、いくつかのアクションが実行されます。今までうまくいっています。

画面の表示領域を基準にして、これらのボタンの1つの位置を取得するにはどうすればよいですか?それを達成する方法について何かアイデア(またはチュートリアル)はありますか?

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 に答える