2011-07-13 13 views
2

なぜこのUIViewレイアウトコードは必要なときに機能しませんか?向きを変更した後にUIViewのサイズを変更するにはどうすればいいですか(コードが機能しないようです)

背景:

  • 私は私のUIViewController
  • UIViewのクロック背景ImageViewのといくつかのコードを導入した後hourhandのImageViewの
  • を持つカスタムを持っているUIViewのカスタムを持っている(下記参照)を試してみます私は立ち往生している向きの変更のために時針のサイズを変更する。
  • コードの下、本当に物事を詰め込む - 砂時計手のoutlike境界線は、このコード

で道オフ私が間違ってやっている任意のアイデアである - 私は明らかにいくつかの仮定や誤解がそれのためにあります

// Centre image 
self.hourHandImageView.center = self.hourFaceUIImageView.center; 

// Resize to cater for either Portrait or Landscape orientation 
CGSize currSize = self.hourFaceUIImageView.frame.size; 
float newHourHandImageheightWidth = currSize.width < currSize.height ? currSize.width : currSize.height; 
CGSize newHourHandViewSize = CGSizeMake(newHourHandImageheightWidth, newHourHandImageheightWidth); 
CGRect newRect = self.hourHandImageView.frame; 
newRect.size = newHourHandViewSize; 
self.hourHandImageView.frame = newRect; 

PS:私のカスタムビューへのUIViewController( "didRotateFromInterfaceOrientation" の方法で)によって呼び出され、このように台無しにする...

コード。 「肖像画または風景の向きに対応するためのサイズ変更」コードがなければ、時針は正確に中央に置かれます(私はそれを回すために変形を使用することに注意してください)。私が本当に必要とするのは、向きの変更後に時針を適切にリサイズすることです。ランドスケープモードでは、1時間の背景画像が小さいことに注意してください。

+0

ディメンションの変更が反映されていますか?アンカーポイントが間違った場所に入っていますか? – Ravin

+0

[self.view layoutSubviews]または[self.view setNeedsDisplay]を試しましたか?ビューを更新するにはsetNeedsDisplayを試してください。 –

+0

@Ravin - センターが間違った場所に来ていて、サイズが間違っています – Greg

答えて

1

まず、縦向きか横向きかを確認するにはどうすればよいですか? (?) - その後、それぞれの方法で、あなたが新しいフレームを定義する必要があります

(void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration{ 
    if (UIInterfaceOrientationIsPortrait(toInterfaceOrientation)) { 
     [self reOrderToPortrait]; 
    } else if (UIInterfaceOrientationIsLandscape(toInterfaceOrientation)){ 
     [self reOrderToLandScape]; 
    } 
} 

:これで:私はあなたをアドバイスう

float newHourHandImageheightWidth = currSize.width < currSize.height ? currSize.width : currSize.height; 

何、このような何かを行うことですあなたの意見新しいフレームを定義するので、自分のビューからオートサイジングを取り除いて、それを妨害したくはありません。

#define hourHandImageViewPortrait CGPointMake(...,...) 
#define hourHandImageViewLandScape CGPointMake(..., ...) 
+0

チップのおかげで - 私はそれは私のコードでやろうとしている全体的なものだと思います。つまり、新しいRectを割り当てることによってリセットします。しかし、私がやっているアプローチに何が間違っているかを見ることはできないと思いませんか?私はあなたのヒントを使用することができる気がしますが、私は新しいフレームを作成/割り当てている方法で同じ問題に終わるかもしれません.... :( – Greg

+0

あなたのaproachは最初の目には2つの理由で間違っています:幅を高さと比較することによって、あなたが肖像画または風景モードにいる場合、それを理解しようとしています。 2)あなたのビューの自動サイズ調整を使用したい場合でも、それ以降はフレームを変更しようとしています。私の意見では、ちょっとしたロケット科学... – Peres