2

私のコードは次のようになります。

- (void)viewDidLoad
{
  [self setGridView];
}
-(void)setGridView
{
  CGRect frame; 
  frame .origin.x=0;
  frame.origin.y=20;
  frame.size.width=GRID_WEIGHT;
  frame.size.height=GRID_HEIGHT;
  GridView *ObjGridView=[[GridView alloc]initWithFrame:frame]; 

  [[NSBundle mainBundle ] loadNibNamed:@"GridView" owner:ObjGridView options:nil];
  [ObjGridView setGridViewFrame:frame];

  [self.view addSubview:ObjGridView.GridCellView];
  frame .origin.x+=GRID_WEIGHT;
}

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
  return YES;
}

このコードは、ビューにサブビューを追加し、フレームを設定します

私の問題: 1-サブビューのフレームを横向きモードに設定し、縦向きビューでも正常なビューを使用したいため、向き(横向きまたは縦向き)が発生したときにビューを更新するにはどうすればよいですか?(基本的にどこで行うのですか?これを呼び出す -(void)setGridView デリゲート メソッド)?

2-サブビューがビューの境界を超えていることをどのように知ることができるので、setGridView メソッドでサブビューを処理できますか?

4

5 に答える 5

2

1.以下のメソッドは、向きが変わるたびに自動的に呼び出されます。それぞれの向きに応じて必要な変更を行います。

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {

if (interfaceOrientation == UIInterfaceOrientationPortrait) {}

else if (interfaceOrientation == UIInterfaceOrientationLandscapeLeft) {} 

else if (interfaceOrientation == UIInterfaceOrientationLandscapeRight) {} 

else if (interfaceOrientation == UIInterfaceOrientationPortraitUpsideDown) {}

return YES;

}

2.ビューの幅と高さを把握し、それに応じてフレームを設定する必要があります。それは大したことではありません。

これが役に立てば幸いです。

于 2012-05-30T05:16:11.897 に答える
1

iOSアプリ開発については、独学で学んでいるので、回答が簡潔になることをお許しください。

Apple の開発者向けリソースにあるこのドキュメント内の「向きの変更への対応」というタイトルのセクションで、問題に対する答えを見つけることができると思います。

http://developer.apple.com/library/ios/#featuredarticles/ViewControllerPGforiPhoneOS/RespondingtoDeviceOrientationChanges/RespondingtoDeviceOrientationChanges.html

これが問題の解決策を推測するのに役立つことを願っています.

于 2012-05-30T04:30:50.687 に答える
0

あなたの質問に答えてL

向きの変更時のサイズ変更について: それに応じてスプリングとストラットを設定すると、自動的に自動サイズ変更する必要があります。代わりに、deamonsarea の回答に従ってコードでこれを行うこともできます。

ビューがスーパービューの境界を超えているかどうかを確認するには、CGRectContainsRect などを使用します。

CGRect frame0 = self.view.bounds;
CGRect frame1 = ObjGridView.frame;
if(CGRectContainsRect(frame0,frame1)==NO){
  NSLog(@"exceeds bounds")
}

また、[super viewDidLoad] とこの行を呼び出していないことに気付きました

[[NSBundle mainBundle ] loadNibNamed:@"GridView" owner:ObjGridView options:nil];

ビューの新しいインスタンスをロードしますが、どこにも参照していません

于 2012-05-30T05:33:39.783 に答える
0

UIView 自体の内部の向きの変更に対応する方法を探しているときに、この質問を見つけました。もし他の人が来たら...

UIView(カプセル化またはその他の理由で)ではなく内の向きの変更に対応する場合はUIViewController、次の方法を使用できます。

class MyView: UIView {
  override func layoutSubviews() {
    super.layoutSubviews()
    println("orientation or other bounds-impacting change")
  }
}
于 2015-06-18T17:56:35.053 に答える