2011-07-02 59 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