English 中文(简体)
图像在“ 横向方向” 上位置不正确
原标题:Image is not positioned properly when on Landscape Orientation

请找到下面的代码, 当我将模拟器旋转到地貌时, 图像位置不正确。 但在肖像中它看起来不错 。

我的图像尺寸是高度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: As i cant submit comment now, When debugging it is comming under all the cases of willrotate

最佳回答

- (BOOL) 中写入您的代码应该自动写入到界面方向:(UI Interfaceentification) 界面方向 而不是 - (eve) 将会旋转到界面方向: (UI Interfaceentication) 界面方向持续时间 : (NSTime Interval) 期限 并在其中执行 。 我认为这将是有效的 。

- (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;
    }
}
问题回答

暂无回答




相关问题
List Contents of Directory in a UITableView

I am trying to list the contents of Ringtones directory in a TableView, however, I am only getting the last file in the directory in ALL cells, instead of file per cell. This is my code: - (...

iPhone NSUserDefaults persistance difficulty

In my app i have a bunch of data i store in the NSUserdefaults. This information consists of an NSObject (Object1) with NSStrings and NSNumbers and also 2 instances of yet another object (Object2). ...

Writing a masked image to disk as a PNG file

Basically I m downloading images off of a webserver and then caching them to the disk, but before I do so I want to mask them. I m using the masking code everyone seems to point at which can be found ...

Resize UIImage with aspect ratio?

I m using this code to resize an image on the iPhone: CGRect screenRect = CGRectMake(0, 0, 320.0, 480.0); UIGraphicsBeginImageContext(screenRect.size); [value drawInRect:screenRect blendMode:...

Allowing interaction with a UIView under another UIView

Is there a simple way of allowing interaction with a button in a UIView that lies under another UIView - where there are no actual objects from the top UIView on top of the button? For instance, ...