web-dev-qa-db-ja.com

UIViewのOrigin参照を設定する方法は?

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

Origin.yとして常に0を使用しています

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

コード内の参照ポイントを変更するにはどうすればよいですか?

enter image description here

20
Daniel

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

UIViewを使用すると、2つの方法で位置を設定できます。

  • 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 –なるほど、はっきりと「センター」とは言わないので、センターではないかもしれません!
  • anchorPointCGPointは、ビューのポイントinsideを指定する0..1(含む)の範囲の値を持ちます。デフォルトはx = 0.5、y = 0.5で、これは 'center'を意味します(そして_-[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を中心に回転します。

Bu [〜#〜] how [〜#〜]ではなく、特定のことを行う[〜#〜] what [〜#〜]達成、私はこれ以上あなたを助けることはできません。

44
Tricertops

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

CGRect frame = self.imageView.frame;
frame.Origin.y = 0.0f;
self.imageView.frame = frame;
8
Phillip Mills

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

_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];

どちらの方法でも、追加する親の左上に画像ビューが設定されます。

2
jmstone617