UIImageView を作成し、それをビューにループで追加しています。初期フレームを 0,0,1,47 に設定し、ループの各通過で画像ビューの中心を変更して間隔を空けます。
私は常にorigin.yとして0を使用しています
問題は、原点参照が画像ビューの中央にあることです。これは、インターフェイス ビルダーを使用していると仮定すると、下の画像と同じです。
コード内の基準点を変更するにはどうすればよいですか?
これらの回答とあなたのコメントを読んだ後、私はあなたのポイントが本当にわかりません.
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
時間の例:
view.layer.anchorPoint = CGPointMake(1, 1);
view.layer.position = CGPointMake(300, 300);
注:レイヤー/ビューを回転するとanchorPoint
、デフォルトでは中心である を中心に回転します。
しかし、達成したいことではなく、特定のことをどのように行うかを尋ねるだけなので、これ以上お手伝いすることはできません.
オブジェクトのフレームには、そのスーパービューでの位置が含まれます。次のような方法で変更できます。
CGRect frame = self.imageView.frame;
frame.origin.y = 0.0f;
self.imageView.frame = frame;
私の理解が正しければ、移動したい画像ビューのフレームを設定する必要があります。これは、次のような単純なケースで実行できます。
_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];
どちらのアプローチでも、画像ビューを追加先の親の左上に設定します。