Изменение размера на iPhone при вращении - PullRequest
6 голосов
/ 31 марта 2010

У меня есть приложение с множеством просмотров. Я хочу, чтобы только несколько видов могли поворачиваться в горизонтальной плоскости при повороте устройства. Я обнаружил, что не могу использовать (BOOL)shouldAutorotateToInterfaceOrientation, потому что это будет вращать все представления в моем приложении. Я нашел решение этой проблемы здесь, в Переполнении стека, но теперь у меня есть еще одна проблема, с которой нужно разобраться.

Вид поворачивается, когда я поворачиваю устройство, но он по-прежнему показывает вид, как будто он все еще находится в портретном режиме (прямо вверх и вниз). Верх и низ вида обрезаны. Есть ли способ повернуть вид, а также настроить его размер в соответствии с новой ориентацией? Я также нашел это , но не смог заставить его работать.

Вот мой код для этого вида:

@implementation businessBank
@synthesize webView, activityIndicator;


- (void)viewDidLoad {

    [super viewDidLoad];
    NSString *urlAddress = @"website_url";

    NSURL *url = [NSURL URLWithString:urlAddress];
    NSURLRequest *requestObj = [NSURLRequest requestWithURL:url];

    [webView loadRequest:requestObj];
    [[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications];
    [[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(didRotate:)
                                                 name:UIDeviceOrientationDidChangeNotification
                                               object:nil];

}
- (void)didRotate:(NSNotification *)notification {

    UIDeviceOrientation orientation = [[notification object] orientation];

    if (orientation == UIDeviceOrientationLandscapeLeft) {
        [self.view setTransform:CGAffineTransformMakeRotation(M_PI / 2.0)];
    } else if (orientation == UIDeviceOrientationLandscapeRight) {
        [self.view setTransform:CGAffineTransformMakeRotation(M_PI / -2.0)];
    } else if (orientation == UIDeviceOrientationPortraitUpsideDown) {
        [self.view setTransform:CGAffineTransformMakeRotation(M_PI)];
    } else if (orientation == UIDeviceOrientationPortrait) {
        [self.view setTransform:CGAffineTransformMakeRotation(0.0)];
    }
}

1 Ответ

3 голосов
/ 31 марта 2010

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

Для получения справки по автоматическому изменению размера представлений вы можете проверить этот учебник:

http://theappleblog.com/2009/04/08/iphone-dev-sessions-how-to-make-an-orientation-aware-clock/

Чтобы использовать более надежный метод переключения представлений, этот урок должен вам помочь:

http://icodeblog.com/2008/08/03/iphone-programming-tutorial-transitioning-between-views/

...