Каковы некоторые из возможных причин того, что UIView редко не поворачивается при повторном посещении? - PullRequest
0 голосов
/ 06 августа 2009

Я вставил этот код во все мои контроллеры view:

    UIInterfaceOrientation orientation = [[UIApplication sharedApplication] statusBarOrientation];

    if (orientation == UIInterfaceOrientationLandscapeRight) {
        CGAffineTransform transform = self.view.transform;

        // Use the status bar frame to determine the center point of the window's content area.
        //CGRect statusBarFrame = [[UIApplication sharedApplication] statusBarFrame];
        //CGRect bounds = CGRectMake(0, 0, statusBarFrame.size.height, statusBarFrame.origin.x);
        CGPoint center = CGPointMake(320/2, 480/2);

        // Set the center point of the view to the center point of the window's content area.
        self.view.center = center;

        // Rotate the view 90 degrees around its new center point.
        transform = CGAffineTransformRotate(transform, (M_PI / 2.0));
        self.view.transform = transform;
    }   

и у меня также есть:

 - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
    // Return YES for supported orientations

    return (interfaceOrientation == UIInterfaceOrientationLandscapeRight);
}

Я вижу, что коды работают правильно, как и должны, но время от времени бывает редкий случай, когда контроллеру основного вида не удалось повернуть в ландшафтный режим после того, как я вернул его вид в основной вид. Вероятность того, что это произойдет, очень редка, но меня это беспокоит. Более того, я вижу, что это происходит чаще всего на iphone. На симуляторе я вспомнил, что этого никогда не произойдет. Вы знаете, каковы возможные причины этого? Заранее спасибо.

1 Ответ

0 голосов
/ 11 августа 2009

Я нашел причину своей программы для iphone.

Одной из возможных причин является память. Этот метод ниже будет вызван, когда системе не хватает памяти:

- (void)didReceiveMemoryWarning {
    // Releases the view if it doesn't have a superview.
    [super didReceiveMemoryWarning];

    // Release any cached data, images, etc that aren't in use.
}

"Невидимый" UIView выгружается при вызове этого метода. Когда вы снова увидите этот вид, устройство перезагрузит его, но может быть потому, что вы установили параметры (для поворота и т. Д.) В месте, где он не будет вызываться при перезагрузке. Вы можете использовать:

- (void)viewDidLoad {

    UIApplication* application = [UIApplication sharedApplication];
    application.statusBarOrientation = UIInterfaceOrientationLandscapeRight;

    CGAffineTransform landscapeTransform = CGAffineTransformMakeRotation([MyMath radd:90]);
    landscapeTransform = CGAffineTransformTranslate (landscapeTransform, -80, 83);

    [self.view setTransform: landscapeTransform];
    [super viewDidLoad];
}

Это происходит в устройстве, потому что речь идет о реальной памяти на реальном устройстве. При использовании симулятора вы можете использовать «Оборудование> Предупреждение о симуляции памяти».

...