目标 c 中 didload 方法开始时的 LandscapeOrientation

Posted

技术标签:

【中文标题】目标 c 中 didload 方法开始时的 LandscapeOrientation【英文标题】:LandscapeOrientation on start of didload method in objective c 【发布时间】:2012-01-08 06:56:39 【问题描述】:

我已经制作了一个 iPad 应用程序,

当我第一次以纵向模式加载我的应用程序时它工作正常,但是当我第一次以横向模式加载我的应用程序时,它只采用纵向模式的坐标,因为在我的 didLoad 方法中我给出仅纵向模式的坐标。

现在需要在我的didLoad 方法中给出横向模式的坐标。

我在 didLoad 方法中尝试了这个

if (interfaceOrientation == UIInterfacePortraitmode ||
    interfaceOrientation == UIInterfaceUpsideDown)

    // do this....

else

    // do this....

但我无法在 didLoad 方法中编写 if/else 的条件。

我该怎么办?

【问题讨论】:

【参考方案1】:

您可以进行如下处理 -

-(void) viewWillAppear: (BOOL) animated 
       [super viewWillAppear: animated];
       [self updateLayoutForNewOrientation: self.interfaceOrientation];


-(void) willAnimateRotationToInterfaceOrientation: (UIInterfaceOrientation) interfaceOrientation duration: (NSTimeInterval) duration 
       [self updateLayoutForNewOrientation: interfaceOrientation];

最后是自定义方法 -

- (void) updateLayoutForNewOrientation: (UIInterfaceOrientation) orientation 
    if (UIInterfaceOrientationIsLandscape(orientation)) 
         // Do some stuff
     else 
         // Do some other stuff
    

【讨论】:

【参考方案2】:
-(void) viewWillAppear: (BOOL) animated 
       [super viewWillAppear: animated];
       [self adjustViewtForNewOrientation: self.interfaceOrientation];


-(void) willAnimateRotationToInterfaceOrientation: (UIInterfaceOrientation) interfaceOrientation duration: (NSTimeInterval) duration 
       [self adjustViewtForNewOrientation: interfaceOrientation];



- (void) adjustViewtForNewOrientation: (UIInterfaceOrientation) orientation 
    if (UIInterfaceOrientationIsLandscape(orientation)) 
         // Do some stuff
     else 
         // Do some other stuff
    

在您的 ViewDidLaod() 方法中也调用 adjustViewtForNewOrientation

【讨论】:

【参考方案3】:

我有类似的issue 和 UIScrollView。我按照here 的建议对齐子视图来修复它。

- (void)alignSubViews

    // Position all the content views at their respective page positions
    scrollView.contentSize = CGSizeMake(self.contentViews.count * scrollView.bounds.size.width,
                                        scrollView.bounds.size.height);
    NSUInteger i = 0;
    for (UIView *v in self.contentViews) 
        v.frame = CGRectMake(i * scrollView.bounds.size.width, 0,
                             scrollView.bounds.size.width, scrollView.bounds.size.height);
        i++;
    


- (void)viewDidLoad

    [super viewDidLoad];

    //Setup subviews and then align the views.

    [self alignSubViews];


- (void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
                                         duration:(NSTimeInterval)duration 

    [self alignSubViews];
    scrollView.contentOffset = CGPointMake(self.currentPage * scrollView.bounds.size.width, 0);

【讨论】:

以上是关于目标 c 中 didload 方法开始时的 LandscapeOrientation的主要内容,如果未能解决你的问题,请参考以下文章

H3C WX2510HF 无线控制器 + WA4320H-ACN实现三个LAN口提供有线接入业务时的配置说明

实训十(平台的实现)

从批处理文件和/或C#更改LAN设置?

在 Xcode 中复制目标时,有没有办法设置目标在创建之前或创建时的名称?

目标C中UIScrollView中的zoomToRect方法不起作用

应用程序启动时的 Visual Studio 远程调试