6

ここにある情報の使用:iPhoneランドスケープのみのユーティリティ-テンプレートアプリケーションビューをランドスケープのみとして起動、使用、および維持することができます。しかし、私は軸について混乱しています。

絶対軸は期待どおりに動作します。つまり、(0,0)は左上、(240,0)は上中央、(0,320)は左下隅などです。ただし、私が描いているビューx、yは、左上のポートレートが原点であるかのように方向付けられていることがわかります。したがって、View Controllerの中心点に何かを描画するには、次のことを行う必要があります。

CGPoint center = CGPointMake(self.view.center.y, self.view.center.x);

これは、コントローラーのself.viewによって参照されるUIViewが、それを囲むフレームを基準にした値を提供しているためだと思います。つまり、ポートレートモードで左上に軸の原点があるウィンドウを意味します。

私が見逃しているこれを説明する簡単な方法はありますか?

ドキュメントは、transformプロパティがまさに私が探しているものであることを示唆していますが、ここでさらに混乱が生じています。関連する3つの重要なプロパティがあります。

  • フレーム
  • 境界
  • 中心

viewDidLoadでこれを行う場合:

// calculate new center point
CGFloat x = self.view.bounds.size.width / 2.0;
CGFloat y = self.view.bounds.size.height / 2.0;
CGPoint center = CGPointMake(y, x);

// set the new center point
self.view.center = center;

// Rotate the view 90 degrees counter clockwise around the new center point.
CGAffineTransform transform = self.view.transform;
transform = CGAffineTransformRotate(transform, -(M_PI / 2.0));
self.view.transform = transform;

リファレンスドキュメントによると、トランスフォームがIDに設定されていない場合、トランスフォームself.view.frameは未定義です。だから私は境界と中心で作業する必要があります。

self.view.centerは、希望どおりに設定したため、正しくなりました。self.view.boundsは変更されていないように見えます。self.view.frameは私が望んでいるものとまったく同じように見えますが、上記のように、参照はそれが無効であると主張しています。

ですから、私は正しい数字であると信じているものを手に入れることができますが、後で厄介になる重要な何かを見落としているのではないかと心配しています。

ありがとう。

4

1 に答える 1

2

Quartz 2Dでは、座標系の原点(0,0)は、左上隅ではなく、グラフィックの左下隅にあります。多分それはあなたが欠けているものです。

参照:http ://developer.apple.com/documentation/graphicsimaging/Conceptual/drawingwithquartz2d/dq_overview/dq_overview.html#//apple_ref/doc/uid/TP30001066-CH202-CJBBAEEC

于 2009-04-18T15:38:54.830 に答える