LandScape /人像尺寸与iOS不同

我有五个UIButton ,我需要设置UIButton的框架,以便它应该为Landscapeportrait不同的大小。 但从下面的代码viewDidLoad其加载罚款,但问题是,加载堆栈当我移动到Landscape portraitportrait Landscape它应该根据我设置的viewdidload大小改变..但这不是发生了……它已经重叠,因为以前的button已经创build….我需要什么样的变化,所以当更改视图..button应该来适当..不应该重叠。

 -(void)viewDidLoad{ int Height = 200; int Yposition = 20; for (int k=0; k<5; k++) { if ([UIApplication sharedApplication].statusBarOrientation== UIInterfaceOrientationLandscapeLeft || [UIApplication sharedApplication].statusBarOrientation == UIInterfaceOrientationLandscapeRight) { UIButton *loPlayButton=[UIButton buttonWithType:UIButtonTypeCustom]; [loPlayButton addTarget:self action:@selector(PlayButtonAction:) forControlEvents:UIControlEventTouchUpInside]; // loPlayButton.tag = 100+k; NSLog(@"tag is %i",loPlayButton.tag); loPlayButton.alpha = 1.0; UIImage *image=[UIImage imageNamed:@"vid.png"]; [loPlayButton setBackgroundImage:image forState:UIControlStateNormal]; loPlayButton.frame=CGRectMake(520, Yposition +(k*Height +170), image.size.width, 30); // loPlayButton.tag=3; [mScrollView_por addSubview:loPlayButton]; [mPlayButtonsArray addObject:loPlayButton]; } if ([UIDevice currentDevice].orientation==UIInterfaceOrientationPortrait || [UIDevice currentDevice].orientation == UIInterfaceOrientationPortraitUpsideDown) { UIButton *loPlayButton=[UIButton buttonWithType:UIButtonTypeCustom]; [loPlayButton addTarget:self action:@selector(PlayButtonAction:) forControlEvents:UIControlEventTouchUpInside]; // loPlayButton.tag = 100+k; NSLog(@"tag is %i",loPlayButton.tag); loPlayButton.alpha = 1.0; UIImage *image=[UIImage imageNamed:@"vid.png"]; [loPlayButton setBackgroundImage:image forState:UIControlStateNormal]; loPlayButton.frame=CGRectMake(440, Yposition +(k*Height +170), image.size.width, 30); // loPlayButton.tag=3; [mScrollView_por addSubview:loPlayButton]; [mPlayButtonsArray addObject:loPlayButton]; }}} - (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration { [self viewDidLoad]; } 

 - (void)viewWillAppear:(BOOL)animated { UIInterfaceOrientation statusBarOrientation = [[UIApplication sharedApplication] statusBarOrientation]; if(UIInterfaceOrientationIsPortrait(statusBarOrientation)) { [self ArrangeControllsFor_Protrate]; } else { [self ArrangeControllsFor_LandScape]; } } - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { // Return YES for supported orientations switch (interfaceOrientation) { case UIInterfaceOrientationPortrait: case UIInterfaceOrientationPortraitUpsideDown: //[self ArrangeControllsFor_Protrate]; [self performSelector:@selector(ArrangeControllsFor_Protrate) withObject:Nil afterDelay:0.005f]; return YES; break; case UIInterfaceOrientationLandscapeLeft: case UIInterfaceOrientationLandscapeRight: [self performSelector:@selector(ArrangeControllsFor_LandScape) withObject:Nil afterDelay:0.005f]; return YES; break; } } - (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration{ //switch ([UIApplication sharedApplication].statusBarOrientation) { switch (toInterfaceOrientation) { case UIInterfaceOrientationPortrait: case UIInterfaceOrientationPortraitUpsideDown: //[self ArrangeControllsFor_Protrate]; [self performSelector:@selector(ArrangeControllsFor_Protrate) withObject:Nil afterDelay:0.005f]; break; case UIInterfaceOrientationLandscapeLeft: case UIInterfaceOrientationLandscapeRight: [self performSelector:@selector(ArrangeControllsFor_LandScape) withObject:Nil afterDelay:0.005f]; break; } } -(NSUInteger)supportedInterfaceOrientations { return UIInterfaceOrientationMaskAll; } -(BOOL)shouldAutorotate { return YES; } -(void)ArrangeControllsFor_Protrate {set frames here. } -(void)ArrangeControllsFor_LandScape {set frames here. } 

Mate添加您的旋转代码在单独的方法,并从viewDidLoad调用它,当它改变方向。 像下面的代码一样:

 -(void)viewDidLoad{ [self rotateTheView]; } - (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration { [self rotateTheView]; } - (void) rotateTheView{ int Height = 200; int Yposition = 20; for (int k=0; k<5; k++) { if ([UIApplication sharedApplication].statusBarOrientation== UIInterfaceOrientationLandscapeLeft || [UIApplication sharedApplication].statusBarOrientation == UIInterfaceOrientationLandscapeRight) { UIButton *loPlayButton=[UIButton buttonWithType:UIButtonTypeCustom]; [loPlayButton addTarget:self action:@selector(PlayButtonAction:) forControlEvents:UIControlEventTouchUpInside]; // loPlayButton.tag = 100+k; NSLog(@"tag is %i",loPlayButton.tag); loPlayButton.alpha = 1.0; UIImage *image=[UIImage imageNamed:@"vid.png"]; [loPlayButton setBackgroundImage:image forState:UIControlStateNormal]; loPlayButton.frame=CGRectMake(520, Yposition +(k*Height +170), image.size.width, 30); // loPlayButton.tag=3; [mScrollView_por addSubview:loPlayButton]; [mPlayButtonsArray addObject:loPlayButton]; } if ([UIDevice currentDevice].orientation==UIInterfaceOrientationPortrait || [UIDevice currentDevice].orientation == UIInterfaceOrientationPortraitUpsideDown) { UIButton *loPlayButton=[UIButton buttonWithType:UIButtonTypeCustom]; [loPlayButton addTarget:self action:@selector(PlayButtonAction:) forControlEvents:UIControlEventTouchUpInside]; // loPlayButton.tag = 100+k; NSLog(@"tag is %i",loPlayButton.tag); loPlayButton.alpha = 1.0; UIImage *image=[UIImage imageNamed:@"vid.png"]; [loPlayButton setBackgroundImage:image forState:UIControlStateNormal]; loPlayButton.frame=CGRectMake(440, Yposition +(k*Height +170), image.size.width, 30); // loPlayButton.tag=3; [mScrollView_por addSubview:loPlayButton]; [mPlayButtonsArray addObject:loPlayButton]; } } } 

你不应该手动调用viewDidLoad 。 不要那样做。

  -(void)viewWillAppear:(BOOL)animated { [self resetFrame:[[UIApplication sharedApplication]statusBarOrientation]]; } - (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration { [self resetFrame:toInterfaceOrientation]; } - (void) resetFrame: (UIInterfaceOrientation)orientation { if (UIInterfaceOrientationIsPortrait(orientation)) { // For portrait } else { // for landscape } } 

首先你需要删除所有的UIButton,然后从你的滚动中添加新的UIButton。

 for (UIView *button in mScrollView_por.subviews) { if([button isKindOfClass:[UIButton class]]) { [button removeFromSuperview]; } }