2012-05-26 3 views
0

Пожалуйста, найдите приведенный ниже код, когда я вращаю свой симулятор до пейзажа, изображения расположены неправильно. Но на портрете это кажется хорошим.Изображение не установлено должным образом, когда на ландшафтной ориентации

, а размер моего изображения - высота 768, а ширина 1024. Даже если я установил рамку соответственно.

Я не уверен, в чем причина этого.

Pls сообщит мне, в чем проблема в моем коде.

const CGFloat HEIGHT = 1024.0; 
const CGFloat WIDTH = 768.0; 
#define myViewPortrait CGRectMake(0.0f, 0.0f, 768.0f,1024.0f) 
#define myViewLandSacpe CGRectMake(0.0f, 0.0f, 1024.0f,768.0f) 

#define kAnimationKey @"animationKey" 


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

    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 += (self.view.frame.size.width); 
    } 
    } 

    [myScrollView setContentSize:CGSizeMake((myImagesCount * self.view.frame.size.width), [myScrollView bounds].size.height)]; 
} 


// Implement viewDidLoad to do additional setup after loading the view, typically from a nib. 
- (void)viewDidLoad { 

    self.view.backgroundColor = [UIColor viewFlipsideBackgroundColor]; 
    myScrollView = [[UIScrollView alloc] initWithFrame: 
    CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height)]; 

    [self.view addSubview:myScrollView]; 

    UISwipeGestureRecognizer *rightRecognizer = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(rightSwipeHandle:)]; 
    rightRecognizer.direction = UISwipeGestureRecognizerDirectionRight; 
    rightRecognizer.numberOfTouchesRequired = 1; 
    [rightRecognizer setDelegate:self]; 
    [myScrollView addGestureRecognizer:rightRecognizer]; 
    [rightRecognizer release]; 

    UISwipeGestureRecognizer *leftRecognizer = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(leftSwipeHandle:)]; 
    leftRecognizer.direction = UISwipeGestureRecognizerDirectionLeft; 
    leftRecognizer.numberOfTouchesRequired = 1; 
    [leftRecognizer setDelegate:self]; 
    [myScrollView addGestureRecognizer:leftRecognizer]; 
    [leftRecognizer release]; 

    [myScrollView setBackgroundColor:[UIColor blackColor]]; 
    [myScrollView setCanCancelContentTouches:NO]; 
    myScrollView.indicatorStyle = UIScrollViewIndicatorStyleWhite; 
    myScrollView.clipsToBounds = YES;  
    myScrollView.scrollEnabled = YES; 
    myScrollView.pagingEnabled = YES; 
    myScrollView.delegate = self; 
    myImagesCount = 5; 
    myScrollView.showsHorizontalScrollIndicator=NO; 
    myScrollView.showsVerticalScrollIndicator=NO; 

    for (int i = 1; i <= myImagesCount; i++) 
    { 
    NSString *imageName = [NSString stringWithFormat:@"screen-%d.jpg", i]; 
    UIImage *image = [UIImage imageNamed:imageName]; 
    UIImageView *imageView = [[UIImageView alloc] initWithImage:image]; 

    CGRect rect = imageView.frame; 
    rect.size.height = myScrollView.frame.size.height; 
     NSLog(@"%d -----",self.view.frame.size.width); 
    rect.size.width = myScrollView.frame.size.width; 
    imageView.frame = rect; 
    imageView.tag = i; 
    [myScrollView addSubview:imageView]; 
    [imageView release]; 
    } 

    [self layoutScrollImages]; 

    [super viewDidLoad]; 

} 

// if you want to change things based on orientation 
- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation) interfaceOrientation duration:(NSTimeInterval)duration 
{ 
    switch (interfaceOrientation) 
    { 
     case UIInterfaceOrientationPortrait: 
     {  
      //changes for Portait 
      NSLog(@"Portait"); 
      [self.view setFrame:CGRectMake(0,0,768,1024)]; 
      myScrollView.frame = self.view.frame; 
     } 
      break; 

     case UIInterfaceOrientationPortraitUpsideDown: 
     { 
      //changes for PortaitUpsideDown 
      NSLog(@"PortaitUpsideDown"); 
      [self.view setFrame:CGRectMake(0,0,768,1024)]; 
      myScrollView.frame = self.view.frame; 

     } 
      break; 


     case UIInterfaceOrientationLandscapeRight: 
     { 
      //changes for LandscapeRight 
      NSLog(@"LandscapeRight"); 
      [self.view setFrame:CGRectMake(0,0,1024,768)]; 
      myScrollView.frame = self.view.frame; 


     } 
      break; 

     case UIInterfaceOrientationLandscapeLeft: 
     { 
      //changes for LandscapeRight 
      NSLog(@"LandscapeRight"); 
      [self.view setFrame:CGRectMake(0,0,1024,768)]; 
      myScrollView.frame = self.view.frame; 

     } 
      break;   
    } 
} 

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer 
{ 
    return YES; 
} 

- (void)rightSwipeHandle:(UISwipeGestureRecognizer*)gestureRecognizer 
{ 
    CATransition *animation = [CATransition animation]; 
    [animation setDelegate:self]; 
    [animation setType:kCATransitionFade]; 
    [animation setSubtype:kCATransitionFromRight]; 
    [animation setDuration:1.0]; 
    [animation setTimingFunction:[CAMediaTimingFunction functionWithName: 
    kCAMediaTimingFunctionEaseInEaseOut]]; 
    [self.view exchangeSubviewAtIndex:0 withSubviewAtIndex:1]; 
    [[self.view layer] addAnimation:animation forKey:kAnimationKey]; 

} 

- (void)leftSwipeHandle:(UISwipeGestureRecognizer*)gestureRecognizer 
{ 
    CATransition *animation = [CATransition animation]; 
    [animation setDelegate:self]; 
    [animation setType:kCATransitionFade]; 
    [animation setSubtype:kCATransitionFromLeft]; 
    [animation setDuration:1.0]; 
    [animation setTimingFunction:[CAMediaTimingFunction functionWithName: 
            kCAMediaTimingFunctionEaseInEaseOut]]; 
    [self.view exchangeSubviewAtIndex:0 withSubviewAtIndex:1]; 
    [[self.view layer] addAnimation:animation forKey:kAnimationKey]; 
} 



// Override to allow orientations other than the default portrait orientation. 
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { 

    return YES; 
} 

Edit: Как я могу отправить комментарий сейчас, При отладке он пришедшего под все случаи willrotate

+0

вы отлаживали код? Он подходит ко всем случаям метода willRotateToInterfaceOrientation при вращении iPad? – Swapnil

ответ

1

Написать свой код в - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation вместо - (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation) interfaceOrientation duration:(NSTimeInterval)duration и реализовать в нем. Я думаю, это будет работа.

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation 
{ 
    // Return YES for supported orientations 

    if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) { 
     //return (interfaceOrientation != UIInterfaceOrientationPortraitUpsideDown); 
     if ((interfaceOrientation == UIInterfaceOrientationLandscapeLeft) || (interfaceOrientation == UIInterfaceOrientationLandscapeRight)) { 
      //implement your code 
     return (interfaceOrientation != UIInterfaceOrientationLandscapeRight); 
    } else { 

     return YES; 
    } 
} 
Смежные вопросы