Странная проблема с экраном iPad - перемещение между представлениями подтолкнуло элементы управления вверх? - PullRequest
1 голос
/ 04 июля 2010

У меня странная проблема, когда я переключаю представления с помощью анимации UIView start, set и commit.

По какой-то причине, когда я меняю вид, он выдвигает элементы, которые у меня есть на экране, примерно на 10 пикселей?

Например, когда я загружаю свой первый вид, элементы на экране загружаются правильно, но как только я перехожу на другой вид, все (во всех моих представлениях) увеличивается на 10 пикселей.

Следующий код - это мой метод в моем AppDelegate, который я вызываю при нажатии кнопки. GameState - мой одиночный класс для отслеживания ViewController.

- (void)gotoStartUp
{
    StartUpController *myStartUp = [[StartUpController alloc] initWithNibName:@"StartUpController" bundle:nil];
    [self setStartUpController:myStartUp];
    [myStartUp release];

    GameState *myVC = [GameState currentGameState];

    [UIView beginAnimations:nil context:NULL];
    [UIView setAnimationDuration:1.0];
    [UIView setAnimationTransition:UIViewAnimationTransitionNone forView:window cache:YES];
        //[UIView setAnimationTransition:UIViewAnimationTransitionCurlUp forView:window cache:YES];
    [myVC.currentViewController.view removeFromSuperview];
    [self.window addSubview:[startUpController view]];
    [UIView commitAnimations];
}

Затем у меня есть другой ViewController и View, на который я переключаюсь на основе выбранной кнопки, используя аналогичный метод, подобный следующему:

- (void)gotoNewGame
{   
    NewGameController *myStartUp = [[NewGameController alloc] initWithNibName:@"NewGameController" bundle:nil];
    [self setNewGameController:myStartUp];
    [myStartUp release];

    GameState *myVC = [GameState currentGameState];

    [UIView beginAnimations:nil context:NULL];
    [UIView setAnimationDuration:1.0];
    [UIView setAnimationTransition:UIViewAnimationTransitionNone forView:window cache:YES];
        //[UIView setAnimationTransition:UIViewAnimationTransitionCurlDown forView:window cache:YES];
    [myVC.currentViewController.view removeFromSuperview];
    [self.window addSubview:[newGameController view]];
    [UIView commitAnimations];
}

Затем я использую эти методы для навигации между моими представлениями (у меня их 5 настроены так).

Я пытался обнять представления и контроллеры представления и соединить их все вместе. Я наконец почувствовал, что добился некоторого прогресса, но понятия не имею, с чего начать. Имейте в виду, что я новичок в Objective-C (и в разработке).

Вот как выглядит экран при начальной загрузке (все выглядит правильно): альтернативный текст http://www.freeimagehosting.net/uploads/4e2eaffa69.png

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

альтернативный текст http://www.freeimagehosting.net/uploads/c22ae63885.png

Заранее спасибо за помощь! Я подумал, что лучше также опубликовать мой заголовочный файл Application Delegate:

#import <UIKit/UIKit.h>

@class StartUpController, FightController,PrepareArenaController, NewGameController, LoadGameController;

@interface ArenaAppDelegate : NSObject <UIApplicationDelegate> {
    UIWindow *window;
    IBOutlet StartUpController *startUpController;
    IBOutlet LoadGameController *loadGameController;
    IBOutlet NewGameController *newGameController;
    IBOutlet PrepareArenaController *prepareArenaController;
    IBOutlet FightController *fightController;
}

@property (nonatomic, retain) IBOutlet UIWindow *window;
@property (nonatomic, retain) IBOutlet StartUpController *startUpController;
@property (nonatomic, retain) IBOutlet LoadGameController *loadGameController;
@property (nonatomic, retain) IBOutlet NewGameController *newGameController;
@property (nonatomic, retain) IBOutlet PrepareArenaController *prepareArenaController;
@property (nonatomic, retain) IBOutlet FightController *fightController;


- (void)gotoStartUp;
- (void)gotoGameInstructions;
- (void)gotoLoadGame;
- (void)gotoNewGame;
- (void)gotoPrepareArena;
- (void)gotoFight;

@end

1 Ответ

1 голос
/ 15 апреля 2011

Попробуйте этот код (от здесь ).Это помогло мне

- (void)viewWillAppear:(BOOL)animated {
    // to fix the controller showing under the status bar
    self.view.frame = [[UIScreen mainScreen] applicationFrame];
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...