2017-02-20 8 views
0

Я пытаюсь интегрировать корону (игровая платформа) с проектом iOS с использованием коронарных карт. Ниже то, что я пытаюсь достичь:iOS и проблема с короной ландшафта

  • Программным вид нагрузку коронного контроллер (ViewController.m/ViewController.h) от AppDelegate.m
  • Force ландшафтного режим для просмотра коронного контроллера

Ниже это код:

AppDelegate.m

ViewController *viewController = [[ViewController alloc] init]; 
 
self.window.rootViewController = viewController; 
 
[self.window makeKeyAndVisible];

ViewController.m

@interface ViewController() 
 
    @property (nonatomic, strong) CoronaViewController *coronaController; 
 
@end 
 

 
- (void)viewDidAppear:(BOOL)animated { 
 
    _coronaController = [[CoronaViewController alloc] init]; 
 
    [self addChildViewController:_coronaController]; 
 
    
 
    CoronaView *coronaView = (CoronaView *)_coronaController.view; 
 
    coronaView.frame = self.view.frame; 
 
    
 
    [self.view addSubview:coronaView]; 
 
    [coronaView run]; 
 
}

Вот скриншот того, как он выглядит:

  • Портрет Режим: image

  • Ландшафтный режим: image

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

* UPDATE * я был в состоянии получить эту работу, выполнив следующие действия:

CGRect appFrame = [UIScreen mainScreen].bounds; 
 
_coronaView.frame = CGRectMake(0, -162, appFrame.size.height, appFrame.size.width); 
 
[self.view addSubview:_coronaView]; 
 
[_coronaView setNeedsLayout];

Однако, я не знаю, почему я должен был установить свой у к - 162. Надеюсь это поможет.

+0

Пожалуйста проверьте мой ответ и дайте мне знать, если он разрешит вашу проблему. – KrishnaCA

+0

Я пробовал ваш подход, и изображение выглядит растянуто. Вот скриншот: http://imgur.com/a/X3IgI –

+0

- это ваш «образ» внутри 'UIImageView'? Если это так, установите 'imageView.contentMode = UIViewContentModeScaleAspectFit' – KrishnaCA

ответ

0

Это происходит потому, что, когда вы идете на Landscape mode от Portrait mode, ширина и высота экрана меняются. Таким образом, coronaView.frame.size.width != [UIScreen mainScreen].bounds.size.width при сдвиге от Portrait к Landscape

Чтобы решить эти проблемы, то лучше использовать AutoLayout для настройки кадра или настройки кадра в viewDidLayoutSubviews в ViewController с,

-(void)viewDidLayoutSubviews { 
    [super viewDidLayoutSubviews]; 
    CoronaView *coronaView = (CoronaView *)_coronaController.view; 
    coronaView.frame = self.view.frame; 
} 

или

- (void)viewDidAppear:(BOOL)animated { 
    _coronaController = [[CoronaViewController alloc] init]; 
    [self addChildViewController:_coronaController]; 

    CoronaView *coronaView = (CoronaView *)_coronaController.view; 
    [self.view addSubview:coronaView]; 

    NSLayoutConstraint *constraint1 = [NSLayoutConstraint constraintWithItem:coronaView attribute:NSLayoutAttributeLeft relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeLeft multiplier:1 constant:0]; 
    NSLayoutConstraint *constraint2 = [NSLayoutConstraint constraintWithItem:coronaView attribute:NSLayoutAttributeRight relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeRight multiplier:1 constant:0]; 
    NSLayoutConstraint *constraint3 = [NSLayoutConstraint constraintWithItem:coronaView attribute:NSLayoutAttributeTop relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeTop multiplier:1 constant:0]; 
    NSLayoutConstraint *constraint4 = [NSLayoutConstraint constraintWithItem:coronaView attribute:NSLayoutAttributeBottom relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeBottom multiplier:1 constant:0]; 
    [self.view addConstraints:@[constraint1, constraint2, constraint3, constraint4]]; 
} 
Смежные вопросы