2011-07-02 62 views
0

我想动态更改视图布局。我如何在我的代码中定义?在我的代码定义为动态更改方向

const CGFloat kScrollObjHeight = 460.0; 
const CGFloat kScrollObjWidth = 320.0; 
const NSUInteger kNumImages  = 32; 

- (void)layoutScrollImages 
{ 
    UIImageView *view = nil; 
    NSArray *subviews = [scrollView1 subviews]; 

    // reposition all image subviews in a horizontal serial fashion 
    CGFloat curXLoc = 0; 
    for (view in subviews) 
    { 
     if ([view isKindOfClass:[UIImageView class]] && view.tag > 0) 
     { 
      CGRect frame = view.frame; 
      frame.origin = CGPointMake(curXLoc, 0); 
      view.frame = frame; 

      curXLoc += (kScrollObjWidth); 
     } 
    } 

    // set the content size so it can be scrollable 
    [scrollView1 setContentSize:CGSizeMake((kNumImages * kScrollObjWidth), [scrollView1 bounds].size.height)]; 
} 

- (void)viewDidLoad 
{ 
    self.view.backgroundColor = [UIColor viewFlipsideBackgroundColor]; 

    // 1. setup the scrollview for multiple images and add it to the view controller 
    // 
    // note: the following can be done in Interface Builder, but we show this in code for clarity 
    [scrollView1 setBackgroundColor:[UIColor blackColor]]; 
    [scrollView1 setCanCancelContentTouches:NO]; 
    scrollView1.indicatorStyle = UIScrollViewIndicatorStyleWhite; 
    scrollView1.clipsToBounds = YES;  // default is NO, we want to restrict drawing within our scrollview 
    scrollView1.scrollEnabled = YES; 

    //imageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"image0.jpg"]]; 
    [scrollView1 addSubview:imageView]; 
    [scrollView1 setContentSize:CGSizeMake(imageView.frame.size.width, imageView.frame.size.height)]; 
    scrollView1.minimumZoomScale = 1; 
    scrollView1.maximumZoomScale = 3; 
    scrollView1.delegate = self; 
    [scrollView1 setScrollEnabled:YES]; 

    // pagingEnabled property default is NO, if set the scroller will stop or snap at each photo 
    // if you want free-flowing scroll, don't set this property. 
    scrollView1.pagingEnabled = YES; 

    // load all the images from our bundle and add them to the scroll view 
    NSUInteger i; 
    for (i = 1; i <= kNumImages; i++) 
    { 
     NSString *imageName = [NSString stringWithFormat:@"page-%d.jpg", i]; 
     UIImage *image = [UIImage imageNamed:imageName]; 
     UIImageView *ImageView = [[UIImageView alloc] initWithImage:image]; 

     // setup each frame to a default height and width, it will be properly placed when we call "updateScrollList" 
     CGRect rect = ImageView.frame; 
     rect.size.height = kScrollObjHeight; 
     rect.size.width = kScrollObjWidth; 
     ImageView.frame = rect; 
     ImageView.tag = i; // tag our images for later use when we place them in serial fashion 
     [scrollView1 addSubview:ImageView]; 
     [ImageView release]; 
    } 

    [self layoutScrollImages]; // now place the photos in serial layout within the scrollview 


} 

-(UIView *) viewForZoomingInScrollView:(UIScrollView *)scrollView { 
    return imageView; 
} 


- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { 

    return YES; 
} 


- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration { 

    [super willRotateToInterfaceOrientation:toInterfaceOrientation duration:duration]; 


    switch(toInterfaceOrientation){ 
     case (UIInterfaceOrientationLandscapeLeft): 
     { 
      landscapeModeViewController=[[LandscapeModeViewController alloc] initWithNibName:@"LandscapeModeViewController" bundle:nil]; 
      [self.view addSubview:landscapeModeViewController.view]; 
      /*UIAlertView *info = [[UIAlertView alloc] initWithTitle:@"Info" message:@"change Mode" delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil]; 
      [info show]; 
      [info release];*/ 
     } 
      break; 
     case(UIInterfaceOrientationLandscapeRight): 
     { 
      //landscapeModeViewController=[[LandscapeModeViewController alloc] initWithNibName:@"LandscapeModeViewController" bundle:nil]; 
      //[self.view addSubview:landscapeModeViewController.view]; 
      UIAlertView *info = [[UIAlertView alloc] initWithTitle:@"Info" message:@"change Mode" delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil]; 
      [info show]; 
      [info release]; 
     } 
      break; 
     case(UIInterfaceOrientationPortrait): 
     { 
      //portraitMode=[[PortraitMode alloc] initWithNibName:@"PortraitMode" bundle:nil]; 
      //[self.view addSubview:portraitMode.view]; 
      UIAlertView *info = [[UIAlertView alloc] initWithTitle:@"Info" message:@"change Mode" delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil]; 
      [info show]; 
      [info release]; 

     } 
      break; 

      /*if(toInterfaceOrientation == UIInterfaceOrientationLandscapeLeft || toInterfaceOrientation == UIInterfaceOrientationLandscapeRight) { 
      UIAlertView *info = [[UIAlertView alloc] initWithTitle:@"Info" message:@"Select Landscape mode." delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil]; 
      [info show]; 
      [info release]; 
      [scrollView1 release]; 
      landscapeModeViewController=[[LandscapeModeViewController alloc] initWithNibName:@"LandscapeModeViewController" bundle:nil]; 
      [self.view addSubview:landscapeModeViewController.view]; 


      } 


      else{ 
      UIAlertView *info = [[UIAlertView alloc] initWithTitle:@"Info" message:@"Select Portrait Mode" delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil]; 
      [info show]; 
      [info release]; 

      portraitMode=[[PortraitMode alloc] initWithNibName:@"PortraitMode" bundle:nil]; 
      [self.scrollView1 addSubview:portraitMode.view]; 
      } */ 


    } 
} 
- (void)dealloc 
{  
    [scrollView1 release]; 
    [imageView release]; 

    [super dealloc]; 
} 

- (void)didReceiveMemoryWarning 
{ 

    [super didReceiveMemoryWarning]; 
} 

@end 
在当旋转装置然后执行uialerview但以前的观点不释放和他后面所示landsacpe模式上述代码

。所以我会为此做些什么?

回答

2

您可以以任何您想要的方式为布局中的每个视图设置自动调整大小掩码。

例如,如果你想按钮,在左上角始终显示,可以设置自动调整面具灵活的顶部和左侧..

如果你的布局是在人像和风景完全不同,那么你需要在willRotateToInterfaceOrientation中设置帧。

例如,如果您希望纵向上的左上角按钮和横向中央的按钮,则需要使用上述委托方法设置框架。

编辑答案:

if(UIInterfaceOrientationIsLandscape(toInterfaceOrientation)){ 
    if(!landscapeModeViewController){ 
     landscapeModeViewController=[[LandscapeModeViewController alloc] initWithNibName:@"LandscapeModeViewController" bundle:nil]; 
    } 
    [self.view addSubview:landscapeModeViewController.view]; 
    [self.view bringSubviewToFront:landscapeModeViewController.view]; 
} 
else if(UIInterfaceOrientationIsPortrait(toInterfaceOrientation)){ 
    if(!portraitMode){ 
     portraitMode=[[PortraitMode alloc] initWithNibName:@"PortraitMode" bundle:nil]; 
    } 
    [self.view addSubview:portraitMode.view]; 
    [self.view bringSubviewToFront:portraitMode.view]; 
} 
+0

感谢乌拉圭回合的答案,但我尝试它并不需要我。我已编辑我的问题,所以请检查另一个解决方案。 – ram

+0

检查我更新的答案,如果这样的作品... – iMOBDEV

+0

感谢您的建议。 – ram