3

ViewController に view.center プロパティを要求し、この「中心」を中心とする新しい UIView を描画しています...応答として (160, 250) を取得しています。しかし、新しいUIViewが描画されると、それは中央のになります...だから、誰がこの情報を私に与えてくれているのか、そしてそれが何に関係しているのか疑問に思っています? ステータス バーの 20 ピクセルの高さを考慮すると、これは明らかにビューの中心が WINDOW に対してある場所です。これにより、ビューの中心が 10 ピクセル下に押し出されます。しかし、myViewを描画すると、ウィンドウではなくViewController.viewに関連して描画されるように見えるため、中央から20px下に表示されます...

ViewController がその中心 (160, 230) を与えてくれるので、その中心に描くことができると思います...ステータスバーを手動で考慮し、毎回高さから 20 を引く必要がありますか? または、私が見落としているビュースペースの翻訳はありますか? ViewController.m から:

- (void)setUpMyView {
// Create my view

MyView *aView = [[MyView alloc] init];
self.myView = aView;
[aView release];
myView.center = self.view.center;
NSLog(@"CenterX: %f, Y: %f", self.view.center.x, self.view.center.y);
CGAffineTransform transform = CGAffineTransformMakeRotation(M_PI_2);
myView.transform = transform;

[self.view addSubview:myView];

}

コンソール: CenterX: 160.000000、Y: 250.000000

4

3 に答える 3

10

実際には「嘘をついている」のではなく、別の座標系で答えを出しているのです。

ビューの中心を取得または設定すると、そのの座標系に対して相対的に計算されます。self.viewの親はアプリケーションのウィンドウであるため、その中心は (160, 250) です。しかしmyViewの親はself.viewで、独自のローカル座標系を持っています。この場合、その座標系はウィンドウの座標系より 20 ピクセル低くなります。

self.myView必要なのは、独自の座標系での中心を見つけることです。2 つの方法があります。

1)ビューの境界を独自の座標系で指定するboundsプロパティに基づいて計算できます。CGRect

myView.center = CGPointMake(self.view.bounds.size.width / 2,
                            self.view.bounds.size.height / 2);

2) または、UIViewconvertPoint:fromView:メソッドを使用して、座標をウィンドウの座標系から の座標系に変換できself.viewます。

// ウィンドウの座標系から変換するソース ビューとして nil を渡します
myView.center = [self.view convertPoint:self.view.center fromView:nil];
于 2009-07-08T08:54:45.253 に答える
0

中心とサイズを尋ねる前に、サブビューに追加してください。

MyView *aView = [[MyView alloc] init];
self.myView = aView;
[aView release];
[self.view addSubview:myView]; // add it to the subview first before asking center.
myView.center = self.view.center;
NSLog(@"CenterX: %f, Y: %f", self.view.center.x, self.view.center.y);
CGAffineTransform transform = CGAffineTransformMakeRotation(M_PI_2);
myView.transform = transform;
于 2009-07-02T02:20:54.353 に答える
0

私は答えを知っていると思います。あなた ビューセンターは正しいです!

iPhone のステータス バーが画面の上部から 20 ピクセル下にあることを追加するのを忘れたため、ビュー センターに含まれています。ビンゴ。

于 2009-07-02T12:13:56.720 に答える