2

GLKViewControllerサブクラスに次のようなコードがあります。

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
    UITouch * touch = [touches anyObject];
    CGPoint point = [touch locationInView:self.view];
    NSLog(@"touch has begun!: %f %f",point.x,point.y);
    float xw = [self.view bounds].size.width;
    float yw = [self.view bounds].size.height;
    NSLog(@"touch -- %f %f", point.x / xw, point.y / yw);
}

-(BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation
{
    return UIInterfaceOrientationLandscapeRight == toInterfaceOrientation;
}

さらに、「iPhone / iPodの展開情報」で、サポートされている唯一のデバイスの向きを「LandscapeRight」に設定しました。

上記のコードで実行してテストすると、左上隅が(0,0)のように見えます。ただし、これに似た別のテストプロジェクトがあり、(0,0)ポイントが左下隅にありました。

正確には、座標系の方向を決定するものは何ですか?(0,0)ポイントを左上隅ではなく左下隅にしたい場合、どうすればよいですか?

4

1 に答える 1

2

iOS では、原点と呼ばれる (0,0) の角は常に左上隅にある必要があります。おそらく UIView をサブクラス化し、境界/フレームの計算、サブビューのレイアウト、コンテンツの描画など、さまざまな演算をすべて自分で処理する以外に、それを変更する便利な方法があることを知りません。

Mac では、原点が少し異なります。デフォルトでは左下にあります。ただし、NSView をサブクラス化YESし、-isFlippedメソッドから戻って、原点が左上にある iOS のように座標が動作することをビュー階層に示すことができます。

iOS の左下に原点が誤って表示される簡単な方法を私は知りません。他のテスト プロジェクトからコードを投稿すると、この回答を拡張して対処できます。

于 2012-09-19T20:08:58.703 に答える