开发者

change orientation dynamically

开发者 https://www.devze.com 2023-03-17 06:47 出处:网络
I want to change my view layout dynamically. how i define in my code? In my code i define as const CGFloat kScrollObjHeight= 460.0;

I want to change my view layout dynamically. how i define in my code? In my code i define as

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 = [UIImag开发者_开发知识库e 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

in above code when rotate device then uialerview execute but previous view not release and landsacpe mode shown behind him. so what i will do for that?


You can set autoresize mask to each view in your layout in whatever manner you want.

For example, if you want button to show always on top left corner, you can set auto resize mask to flexible top and left..

If your layout is totally different in portrait and landscape, then you need to set frames in willRotateToInterfaceOrientation.

For example if you want your button on top left in portrait and in center in landscape, than you need to set frame in the above delegate method.

Edit Answer:

 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

精彩评论

暂无评论...
验证码 换一张
取 消