21

UIImageView を作成し、それをビューにループで追加しています。初期フレームを 0,0,1,47 に設定し、ループの各通過で画像ビューの中心を変更して間隔を空けます。

私は常にorigin.yとして0を使用しています

問題は、原点参照が画像ビューの中央にあることです。これは、インターフェイス ビルダーを使用していると仮定すると、下の画像と同じです。

コード内の基準点を変更するにはどうすればよいですか?

ここに画像の説明を入力

4

4 に答える 4

45

これらの回答とあなたのコメントを読んだ後、私はあなたのポイントが本当にわかりません.

2 つの方法で位置をUIView設定できます。

  • center――確かにセンターですね。
  • frame.origin– 左上隅、直接設定できません。

左下隅を x=300, y=300 にしたい場合は、これを行うだけです:

UIView *view = ...
CGRect frame = view.frame;
frame.origin.x = 300 - frame.size.width;
frame.origin.y = 300 - frame.size.height;
view.frame = frame;

CALayersしかし、 (QuartzCore をインポートすることを忘れないでください) の魔法の世界に 1 レベル深く進むと、より強力になります。

CALayerこれらがあります:

  • position–ほら、「センター」と明示的に書かれていないので、センターではないかもしれません!
  • anchorPoint–ビューCGPointのポイントを指定する範囲 0..1 (含む) の値。デフォルトは x=0.5、y=0.5 で、これは「中心」を意味します (この値を想定しています)。他の値に設定すると、プロパティがそのポイントに適用されます。-[UIView center]position

時間の例:

  1. サイズが 100x100 のビューがあります
  2. view.layer.anchorPoint = CGPointMake(1, 1);
  3. view.layer.position = CGPointMake(300, 300);
  4. ビューの左上隅は x=200、y=200 で、右下隅は x=300、y=300 です。

注:レイヤー/ビューを回転するとanchorPoint、デフォルトでは中心である を中心に回転します。

しかし、達成したいことではなく、特定のことをどのように行うかを尋ねるだけなのでこれ以上お手伝いすることはできません.

于 2013-01-05T17:41:41.073 に答える
8

オブジェクトのフレームには、そのスーパービューでの位置が含まれます。次のような方法で変更できます。

CGRect frame = self.imageView.frame;
frame.origin.y = 0.0f;
self.imageView.frame = frame;
于 2012-04-04T13:56:02.363 に答える
2

私の理解が正しければ、移動したい画像ビューのフレームを設定する必要があります。これは、次のような単純なケースで実行できます。

_theImageView.frame = CGRectMake(x, y, width, height);

明らかに、x、y、幅、および高さを自分で設定する必要があります。ビューのフレームはその親ビューを参照していることにも注意してください。したがって、左上隅 (x = 0, y = 0) にあり、幅 320 ポイント、高さ 400 ポイントのビューがあり、イメージ ビューのフレームを (10, 50, 100, 50) を前のビューのサブビューとして追加すると、イメージ ビューの境界が x = 0、y = 0 であっても、親ビューの座標空間の x = 10、y = 50 に配置されます。 . 境界はビュー自体を参照し、フレームは親を参照します。

したがって、シナリオでは、コードは次のようになります。

CGRect currentFrame = _theImageView.frame;
currentFrame.origin.x = 0;
currentFrame.origin.y = 0;
_theImageView.frame = currentFrame;

[_parentView addSubview:_theImageView];

または、次のように言うこともできます。

CGRect currentFrame = _theImageView.frame;
_theImageView.frame = CGRectMake(0, 0, currentFrame.size.width, currentFrame.size.height);

[_parentView addSubview:_theImageView];

どちらのアプローチでも、画像ビューを追加先の親の左上に設定します。

于 2012-04-04T13:54:37.463 に答える