LandScape / Portrait尺寸与iOS不同

时间:2013-02-27 12:45:48

标签: iphone ios landscape landscape-portrait

我有五个UIButton,我需要设置UIButton的框架,以便它应该是Landscapeportrait不同的尺寸。 但是来自下面的代码viewDidLoad它的加载很好,但问题是加载堆栈后我移动到Landscapeportraitportrait到{{1}它应该根据我设置的Landscape大小进行更改..但这不会发生......它已经重叠,因为之前的Button已经创建了....我需要做哪些更改以便在更改时视图..按钮应该正确..不应该重叠。

viewdidload

4 个答案:

答案 0 :(得分:1)

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

    }
  }
}

答案 1 :(得分:1)

- (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.
}

答案 2 :(得分:0)

您不应该手动调用 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

}
}

答案 3 :(得分:0)

首先,您需要在从滚动条添加新的5 UIButton之前删除所有UIButton。

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