3

私はViewControllerに対してview.centerプロパティを要求しており、この「中心」を中心とした新しいUIViewを描画しています...(160,250)応答。新しいUIViewがそれを描画するときの下にセンター...だから、私にこの情報を与えてくれるのは誰なのだろう?これは、ステータスバーの高さ20pxを考慮した場合、ビューの中心とウィンドウとの関係を明確に示しています。それはビューの中心を10ピクセル下に押し上げるでしょう。しかし、myViewを描画すると、ViewController.viewに関連して描画され、Windowではなく20pxになるように表示されます...私のUIViewControllerは、その中心プロパティについて「横たわっています」

私は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

答えて

10

これは実際には「横たわっている」わけではありません。異なる座標系で答えが得られます。あなたが得るまたはビューの中央に設定した場合

、その年代に相対システム座標計算されます。 self.viewの親はアプリケーションのウィンドウなので、その中心はあなたが推測したように(160,250)です。しかし、myViewの親はself.viewであり、ローカル座標系は独自です。この場合、その座標系はウィンドウの座標系よりも20ピクセル低い。

self.myViewの中心が座標系にあります。あなたはそれを行うことができる2つの方法があります。

1)あなたは、独自の座標系でのビューの境界を指定するCGRectあるbounds性質に基づいて、それを計算することができます:

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

2)それとも、UIViewconvertPoint:fromView:を使用することができますself.viewとにウィンドウの座標系から座標変換する方法:

 
// Pass nil as the source view to convert from the window's coordinate system 
myView.center = [self.view convertPoint:self.view.center fromView:nil]; 
+0

別の可能性はself.view.superviewがゼロであることです。私はUITableViewControllerで自分自身に遭遇しました。 –

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; 
0

私は答えを知っていると思います。ビューの中心が正しいです!

iPhoneのステータスバーを追加するのを忘れた場合は、画面の上部から20px下にあり、ビューセンターに表示されます。ビンゴ。

関連する問題