0

我正在构建一个以横向和纵向模式显示图像的应用程序。旋转完美。图像在横向模式下也完美定位。然而,它将横向坐标保持为纵向,因此它错位了。请在下面找到我的代码。你能告诉我我错过了什么吗?还有一种方法可以严格地从 Xib 文件中实现这一点吗?

- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view.
[[self navigationController] setNavigationBarHidden:YES animated:NO];

UIImage *startImage = [UIImage imageNamed:@"title.png"];
UIImageView *startImageView = [[UIImageView alloc] initWithImage:startImage];

if (curOrientation == UIInterfaceOrientationPortrait || curOrientation == UIInterfaceOrientationPortraitUpsideDown) {

    [startImageView setFrame:CGRectMake(-128, 0, 1024, 1024)];

}else{

    [startImageView setFrame:CGRectMake(0, -128, 1024, 1024)];

}

[self.view addSubview:startImageView];


}
4

1 回答 1

3

目前,您仅在首次加载视图时调用此代码。你实际上需要调用它

  • 每当视图出现在屏幕上时(以防设备在屏幕外旋转时)
  • 每当设备旋转

但是您应该将视图创建代码保留在 viewDidLoad 中,因为您只想创建一次。

创建一个属性来保存指向视图的指针,以便您可以从代码中的所有这些位置引用它……</p>

@property (nonatomic, weak) UIImageView* startImageView;

在 viewDidLoad 中创建它(但不要担心几何,因为您可以在 viewWillAppear 中执行此操作):

- (void)viewDidLoad
{
    [super viewDidLoad];
        // Do any additional setup after loading the view.
    [[self navigationController] setNavigationBarHidden:YES animated:NO];
    UIImage *startImage = [UIImage imageNamed:@"title.png"];
    UIImageView *startImageView = [[UIImageView alloc] initWithImage:startImage];
    self.startImageView = startImageView;
    [self.view addSubview:startImageView];
}

制作一个通用的定位方法:

- (void) orientStartImageView
    {
        UIInterfaceOrientation curOrientation = [UIApplication sharedApplication].statusBarOrientation;
        if (curOrientation == UIInterfaceOrientationPortrait || curOrientation == UIInterfaceOrientationPortraitUpsideDown) {
            [self.startImageView setFrame:CGRectMake(-128, 0, 1200, 1200)];
        }else{
            [self.startImageView setFrame:CGRectMake(0, -128, 1200, 1200)];
        }
    }

从 viewWillAppear 调用它(每次视图出现在屏幕上时触发):

- (void) viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];
    [self orientStartImageView];
}

从 viewWillLayoutSubviews 调用它(每次视图在屏幕上并且设备旋转时触发):

- (void)viewWillLayoutSubviews
{
    [super viewWillLayoutSubviews];
    [self orientStartImageView];
}

顺便说一句,我不确定您的帧是否正确 - 在纵向中,您将左边缘移出屏幕,在横向中,您将顶部边缘移出屏幕。那是你要的吗?很可能您可以在 Interface Builder 中实现您想要的,但从您的代码中不清楚那是什么 - 也许您可以发布一张图片。还要检查您是否禁用了自动布局(Interface Builder 的文件检查器中的复选框)以简化问题。

更新

您可以在没有代码的情况下从 Xib 执行此操作:将 imageView 置于其 superView 的中心,将其大小设置为您的最终大小(例如 1200x1200),禁用自动布局,取消选择所有弹簧和支柱,适当地设置您的视图模式(例如centerscaleToFill)

在此处输入图像描述

在此处输入图像描述

在此处输入图像描述

于 2013-02-17T22:53:38.213 回答