Вы должны выделить и инициировать новое представление и заменить текущее представление viewcontroller новым.

аюсь создать приложение в XCode, которое будет переключаться на новый вид, когда телефон поворачивается из одной ориентации в другую.

Вот код файла "switchviewcontroller.h":

#import <UIKit/UIKit.h>

@interface SwitchViewController : UIViewController {

}

-(IBAction)switchview:(id)sender;

@end

А вот код файла "switchviewcontroller.m":

#import "SwitchViewController.h"
#import "secondview.h"

@implementation SwitchViewController

-(IBAction)switchview:(id)sender {}

// Override to allow orientations other than the default portrait orientation.
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
    // Return YES for supported orientations
    return YES;
}

- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation
{
    if((fromInterfaceOrientation == UIInterfaceOrientationLandscapeLeft) ||
       (fromInterfaceOrientation == UIInterfaceOrientationLandscapeRight))
    {    
        [[secondview alloc] initWithNibName:@"secondview" bundle:[NSBundle mainBundle]];
    }

}

Он работает в симуляторе iPhone без ошибок, но при повороте не загружает новый вид. Для начала я думаю, что мне нужно, чтобы приложение открывалось в ландшафтном режиме, что я не знаю, как это сделать, но оно все равно не сработает, и я думаю, что оно связано с частью кода initWithNibName, потому что У меня есть файлы .xib, а не файлы .nib. Кто-нибудь может мне помочь с этими двумя вещами? Благодарю.

 Dave DeLong21 янв. 2011 г., 20:32
Добро пожаловать в StackOverflow. при вставке кода используйте кнопку "{}", чтобы правильно сделать отступ, чтобы он был правильно отформатирован.
 Baccalad21 янв. 2011 г., 20:33
Спасибо Дэйв - - -

Ответы на вопрос(2)

Решение Вопроса

вы только инициируете представление.

secondview *second = [[secondview alloc] initWithNibName:@"secondview" bundle:[NSBundle mainBundle]];
[self.navigationController pushViewController:second animated:YES];

Тем не менее, это не очень хорошее место, чтобы показать новый взгляд.

Если вы хотите показать один и тот же вид в другой ориентации, попробуйте что-нибудь такое:

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
    if(((interfaceOrientation == UIInterfaceOrientationLandscapeLeft) || 
        (interfaceOrientation == UIInterfaceOrientationLandscapeRight))){

        self.view = landscape;

    }else if(((interfaceOrientation == UIInterfaceOrientationPortrait) || 
              (interfaceOrientation == UIInterfaceOrientationPortraitUpsideDown))){

        self.view = portrait;

    }

    return YES;
}

Обратите внимание, чтоportrait а такжеlandscape UIViews в вашем UIViewController, который вы определяете в своем заголовке и подключаетесь через Interface Builder.

Кроме того, они должны быть в.час / .m:

.час
IBOutlet UIView *portrait;
IBOutlet UIView *landscape;

@property(nonatomic,retain) UIView portrait;
@property(nonatomic,retain) UIView landscape;
.m
@synthesize portrait,landscape;
 WrightsCS21 янв. 2011 г., 20:55
Ну, во-первых, я бы не стал выдвигать вид, когда устройство вращается, перейдем ко второму примеру. Как я уже говорил, вам нужно определить представления в заголовке и пройти весь этот процесс. Я обновлю свой ответ с кодом заголовка.
 Baccalad21 янв. 2011 г., 20:54
Спасибо за вашу помощь, я не хочу показаться глупым здесь, но я вставил ваш код, и приложение ведет себя точно так же, я знаю, что вы правы, но я просто не могу понять, что я делаю неправильно.
 Baccalad21 янв. 2011 г., 21:22
Большое спасибо за вашу помощь
 Baccalad21 янв. 2011 г., 21:09
Загружает ли это новый вид или тот же вид в новой ориентации. Я спрашиваю об этом, потому что я хочу, чтобы, например, я мог (хотя я специально этого не делал) показывать фотографию собаки на портрете и таблицу рекордов в пейзаже.
 WrightsCS21 янв. 2011 г., 21:20
это покажет новый взгляд в новой ориентации. Портретные / ландшафтные виды могут быть одинаковыми, только переставленными.

ее представление viewcontroller новым.

- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation {
    if (UIInterfaceOrientationIsLandscape(self.interfaceOrientation) {
        UIView *landscapeView = [[UIView alloc] init];
        // Setup the landscape view here
        self.view = landscapeView;
        [landscapeView release];
    }
    else {
         UIView *portraitView = [[UIView alloc] init];
        // Setup the portrait view here
        self.view = portraitView;
        [portraitView release];
    }
}

Ваш ответ на вопрос