2012-05-26 1 views
0

시뮬레이터를 가로로 회전 할 때 이미지가 제대로 배치되지 않았을 때 다음 코드를 찾으십시오. 그러나 초상화에서 그것은 좋게 보인다.가로 방향으로 이미지를 올바르게 배치하지 않았습니다.

내 이미지 크기는 높이 768이고 너비는 1024입니다. 그러나 그에 따라 프레임을 설정했습니다.

나는 이것이 무엇의 이유인지 잘 모르겠습니다.

내 코드에 어떤 문제가 있는지 알려주세요.

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

편집 : 지금 의견을 제출하지 못할 때, - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation 대신 - (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation) interfaceOrientation duration:(NSTimeInterval)duration에 코드를 작성하고 그 안에 구현 willrotate

+0

코드를 디버깅하셨습니까? iPad를 돌릴 때 willRotateToInterfaceOrientation 메서드의 모든 경우에 적용됩니까? – Swapnil

답변

1

의 에서 모든 경우를오고 디버깅 할 때. 나는 그것이 일할 것이라고 생각한다.

- (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; 
    } 
} 
관련 문제