2012-04-04 7 views
20

UIImageViewを作成してループに追加して、最初のフレームを0,0,1,47に設定し、ループの各パスで画像ビューの中心を変更して空間に配置します。UIViewの原点参照を設定するにはどうすればよいですか?

私はいつも問題が原点基準は、我々は、これは下の画像に相当し、インターフェイスビルダーにあったと仮定すると、画像ビューの中心にあるあるorigin.y

として0を使用しています。

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

enter image description here

+0

IBでその赤いものを動かすことはできませんか? –

+3

はい、ポイントは 'どのようにコード内の参照ポイントを変更できますか? ' – Daniel

答えて

41

これらの回答とあなたのコメントを読んだ後、私は本当にあなたのポイントが分かりません。 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; 

をしかし、あなたは魔法の世界に1つのレベル深く行けばCALayers(QuartzCoreをインポートするのを忘れないでください)、より強力です。

CALayerはこれらがあります。

  • position - あなたはそれが中央ではないかもしれないので、それが明示的に「センター」と言っていない、参照してください!
  • anchorPoint - CGPoint範囲が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を中心に回転します表示します。

富栄あなただけの特定のことを行うためにHOWを依頼していないWHATあなたが達成したいことから、私はさらに、今どんなのを助けることはできません。

+1

私はこれに尋ねたとき、私は非常に混乱しました。簡単に言えば、XcodeのIB機能では、有用なパネルを使ってUIViewのメトリックを設定し、ピクセル値を設定することができますが、中心から上中央、上右下、左下などの参照点を変更することもできますこれにより、私はこれを何らかの形でコードで行うことができると思っていましたが、AppleのXcodeに加えて混乱させないのは単なるUIにすぎませんでした。 – Daniel

+1

私は、全体のポイントがサブビューを右に整列させるための、原点を右中央に設定し、その値を親の幅に設定することによって、これは、幅を引いた子幅などを計算する必要を回避することを意味します。 – Daniel

+0

'frameViewLeft'や' frameOrigin'のようなプロパティを持つ 'UIView'で簡単に七面鳥を作成し、それらのアクセサーを手動で実装することができます。それから、あなたはそれを簡単にします。 – Tricertops

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

どちらのアプローチが左上に画像表示を設定しますあなたがそれを追加する親の。

+1

こんにちは、問題は原点がそのビューの絶対中心に設定されているため、左上に変更する必要があります。 – Daniel

+0

上記で説明したように、イメージビューのxとyを0、0に設定するだけで、親ビューの0、0に配置されます。 – jmstone617

+1

本当に必要なのは、ビューのサイズを気にせずに、ビューの起点を既知のポイントに設定することです。 – Daniel

7

オブジェクトのフレームには、そのスーパービュー内の位置が含まれます。

CGRect frame = self.imageView.frame; 
frame.origin.y = 0.0f; 
self.imageView.frame = frame; 
+1

こんにちは、質問はフレームを変更する方法ではなく、原点の基準点を変更する方法です。現在設定されているy = 0は、ビューの中心が上にではなくy = 0になることを意味します – Daniel

+0

原点を言うとき、どの原点について話していますか?フレームのorigin.yオフセットは、スーパービュー内でのトップの位置です。ビューの 'center'プロパティがありますが、ビュー内の移動可能な参照ポイントがわかりません。 –

+1

原点はおそらく、私が意味することを説明するのに最適な言葉ではありません。IBで見ると、原点基準点を左上から中央、下中央、中央右に変更することができます。私はコードでビューを追加しました。親ビューの先頭に原点(座標)を設定したいので、y = 0としましょう。しかし、私のビューの原点基準点は、デフォルトのように左上には設定されていないようですが、中心に設定されています(画像参照)。したがって、y = 0に設定すると、そのビューの中心がy = 0に設定されているため、ビューの下半分しか表示されません。 – Daniel

関連する問題