0

複数の小さな UIView を、画面の資産に関連するサブビューとして表示したいと思います。これは、さまざまな画面サイズ (iPad、iPhone)、ポートレート、ランドスケープ モードで機能するはずです。

表示する各サブビューには、配置のために正しいx座標とy座標にマップする必要がある-100 (最小) から100 (最大)の範囲の unsigned int を持つ 2 つの NSNumber オブジェクトがあります。

  • これらの値 (-100...100) を変換して、画面に UIView を配置するために使用する最良の方法は何ですか?
  • コードが画面の回転や画面サイズ全体で機能するように、絶対的な方法ではなく相対的な方法でそれらを配置するにはどうすればよいですか?
4

2 に答える 2

1

わかりました。正しく理解できれば、x 方向に -100 を画面の一番左の点にマップし、x 方向に 100 を画面の一番右の点にマップし、y 方向に -100 をマップする必要があります。画面の最低点に、y の 100 を画面の最高点にマップします (または、y が下にあるほど大きくなる画面座標系と一致するように、y を私が持っているものから反転させたい場合があります)あなたが得る画面?)。また、ローテーションも考慮する必要があります。

私が理解している限り、UIScreenそのheightとを求めていますwidth

CGFloat width = [UIScreen mainScreen].bounds.size.width;
CGFloat height = [UIScreen mainScreen].bounds.size.height;

ただし、これは回転を考慮していません。私が認識している他の唯一の方法はUIView、画面をカバーするwidthように依頼するheightことです (最も簡単には、ビューコントローラーのビューを画面全体にカバーさせることができます)。

画面全体を完全にカバーする がある場合UIView(myView と呼びましょう)、次のことを試すことができます。

CGFloat width = myView.frame.size.width;
CGFloat height = myView.frame.size.height;

heightこれらは自分で方向を調整する必要があります(私の経験から、 andwidthを取得した場合は間違いなく機能するはずですviewDidAppear:animated:。また、 s ビュープロパティまたはこのビューのサブビューである必要があります。そうでない場合はUIView、回転についてビューに伝える他の方法UIViewControllerを実装または見つけるため)。didRotateFromInterfaceOrientation:画面の「幅」と「高さ」を取得したら、int から画面位置に変換できます。次のようなものを試してください:

(CGPoint)convertX:(NSNumber *)x andY:(NSNumber *)y intoPoint
{
    pointX = ([x intValue] + 100.0)*width/200.0;
    pointY = (-[y intValue] + 100.0)*height/200.0; // remove the - sign at the front of the expression for y to grow as you move down the screen
    return CGPointMake(pointX, pointY);
}

x と y の -100 から 100 を画面上のそれぞれのポイントに変換します。

于 2012-07-23T01:15:33.577 に答える
0

+/-100 の範囲で作業している場合は、基になる CALayers を使用してビューを配置することをお勧めします。CALayers の優れた点は、アンカー ポイントがデカルト平面上の 0.0 から +1.0 の範囲のデバイスに依存しないグリッドにマップされることです。

于 2012-07-22T22:31:27.290 に答える