Ориентация интерфейса iPhone - что не так с этим? - PullRequest
1 голос
/ 25 июня 2011

В настоящее время я создаю приложение для iPhone с использованием Xcode 4.0.2. Я хочу, чтобы приложение переключало представления, когда пользователь поворачивает свой телефон.Например: если пользователь перевернет свой iPhone на бок, iPhone изменится на готовый ландшафтный вид.Я создал код для него, но когда я запускаю его в iOS Simulator и поворачиваю устройство, ничего не происходит.Что я делаю не так?

Заголовочный файл:

#import "FlipsideViewController.h"

@interface MainViewController : UIViewController <FlipsideViewControllerDelegate> {
IBOutlet UIView *portraitView;
IBOutlet UIView *landscapeView;

}
@property (nonatomic, retain) UIView *portraitView;

@property (nonatomic, retain) UIView *landscapeView;

@end

Файл реализации (.m):

#import "MainViewController.h"
#define deg2rad (3.1415926/180.0)

@implementation MainViewController
@synthesize portraitView;
@synthesize landscapeView;

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
// Return YES for supported orientations.
return (interfaceOrientation == UIInterfaceOrientationPortrait);
return (interfaceOrientation == UIInterfaceOrientationLandscapeLeft);
return (interfaceOrientation == UIInterfaceOrientationLandscapeRight);
}

-(void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration {

if (toInterfaceOrientation == UIInterfaceOrientationLandscapeRight) {
    self.view=landscapeView;
    self.view.transform=CGAffineTransformMakeRotation(deg2rad*(90));
    self.view.bounds=CGRectMake(0.0, 0.0, 480.0, 320.0);
} else if (toInterfaceOrientation == UIInterfaceOrientationLandscapeLeft) {
    self.view=landscapeView;
    self.view.transform=CGAffineTransformMakeRotation(deg2rad*(-90));
    self.view.bounds=CGRectMake(0.0, 0.0, 480.0, 320.0);
} else {
    self.view=portraitView;
    self.view.transform=CGAffineTransformMakeRotation(deg2rad*(0));
    self.view.bounds=CGRectMake(0.0, 0.0, 300.0, 460.0);
}

[super willRotateToInterfaceOrientation:toInterfaceOrientation duration:duration];

}

@end

Я вынул некоторые ненужные вещи, так что файл .m может выглядеть немного голым.Я связал IBOutlets landscapeView и PortraitView с двумя различными представлениями в одном файле .xib с именем MainViewController.xib

При его создании нет ошибок, предупреждений или сигналов.

Есть либолее простой способ сделать это, или я просто делаю это неправильно?Может ли кто-нибудь помочь?Заранее спасибо!

1 Ответ

3 голосов
/ 25 июня 2011

Вам нужно исправить свой shouldAutorotateToInterfaceOrientation для одного.Возвращаемое значение всегда будет совпадать с первым, оно должно выглядеть как

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
// Return YES for supported orientations.
    return (interfaceOrientation == UIInterfaceOrientationPortrait)
        || (interfaceOrientation == UIInterfaceOrientationLandscapeLeft)
        ||(interfaceOrientation == UIInterfaceOrientationLandscapeRight);
}
...