2013-07-24 3 views
3

Я отображая вид Детский контроллер на моем родительском контроллере представления, используякак повернуть контроллер представления родителя при ориентации зрения ребенка контроллер изменяет в прошивкой

childView1 *viewController = [[childView1 alloc]initWithNibName:examTFVC_NIB bundle:nil row:gesture.view.tag productID:test_productID size:testsize Duration:duration]; 
      self.modalPresentationStyle = UIModalPresentationCurrentContext; 
      self.view.alpha = 0.4f; 
      viewController.view.backgroundColor = [UIColor clearColor]; 
      viewController.modalTransitionStyle = UIModalTransitionStyleCoverVertical; 
      [self presentViewController:viewController animated:YES completion:NULL]; 

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

Моя ориентация контроллера родительского представления меняется, когда я не показываю контроллер дочернего представления, как я могу изменить ориентацию контроллера родительского представления вместе с дочерним?

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

В детском контроллере представления

- (NSUInteger)supportedInterfaceOrientations 
{ 
NSUInteger supportedOrientations = UIInterfaceOrientationMaskLandscape; 
[[NSNotificationCenter defaultCenter] postNotificationName:@"RotateParent"object:nil]; 

return supportedOrientations; 
} 
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { 
return (interfaceOrientation == UIInterfaceOrientationLandscapeLeft || interfaceOrientation == UIInterfaceOrientationLandscapeRight); 
} 
- (BOOL)shouldAutorotate 
{ 

return YES; 
} 

В родительском контроллере

-(void)rotateParent:(NSNotification *)notification 
{ 
CGAffineTransform transform = CGAffineTransformMakeRotation(-M_PI); 
self.view.transform = transform; 
NSLog(@"Parent rotate "); 
} 

вид, но когда я нажимаю, чтобы увидеть своего ребенка над родительским зрения, чем мой метод «rotateParent» получить выполняется один раз по умолчанию. любое другое решение?

+0

Значит, вы не можете передать уведомление при последующих поворотах? –

+0

вы можете попробовать отправить уведомление от shouldAutorotateToInterfaceOrientation – prasad

+0

@prasad это не сработает ... потому что он поддерживается только до ios 5 ..и я тестирую на ios 6 –

ответ

3

Для < прошивкой 6,0

в childView1

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { 

[[NSNotificationCenter defaultCenter] postNotificationName:@"RotateParent"object:nil]; 
return (interfaceOrientation == UIInterfaceOrientationLandscapeLeft ||interfaceOrientation == UIInterfaceOrientationLandscapeRight); 

} 

Для> IOS 6.0

- (BOOL)shouldAutorotate 
{ 
     [[NSNotificationCenter defaultCenter] postNotificationName:@"RotateParent" object:nil]; 
     return YES; 
    } 

в Parent Посмотреть

Добавить наблюдатель уведомления, и на основе текущей ориентации вращения родительский вид с правильным углом.

-(void)rotateParent:(NSNotification *)note{ 

UIDeviceOrientation orientation = [UIDevice currentDevice].orientation; 
CGFloat rotationAngle = 0; 

if (orientation == UIDeviceOrientationPortraitUpsideDown) rotationAngle = M_PI; 
else if (orientation == UIDeviceOrientationLandscapeLeft) rotationAngle = M_PI_2; 
else if (orientation == UIDeviceOrientationLandscapeRight) rotationAngle = -M_PI_2; 

[UIView animateWithDuration:0.5 animations:^{ 
    self.view.transform = CGAffineTransformMakeRotation(rotationAngle); 
    self.view.transform = CGAffineTransformMakeRotation(rotationAngle); 
    self.view.transform = CGAffineTransformMakeRotation(rotationAngle); 
} completion:nil]; 

//adjust view frame based on screen size 

if(orientation == UIInterfaceOrientationLandscapeLeft || orientation == UIInterfaceOrientationLandscapeRight) 
{ 
    self.view.bounds = CGRectMake(0.0, 0.0, 480, 320); 
} 
else 
{ 
    self.view.bounds = CGRectMake(0.0, 0.0, 320, 480); 
} 
} 

дайте мне знать, если у вас возникнут проблемы.

+0

Я поменяю ваш ответ в соответствии с моей потребностью, и он работает как на iOS 6, так и на 6 –

+0

. Я использовал CGAffineTransform rotateTransform = CGAffineTransformMakeRotation (90 * M_PI/180.0); –

+0

Thakyou Prasad, Ты спас меня .. – Sabareesh

0

Эй, если я правильно понял вашу проблему, вы можете посмотреть этот превосходный метод от UIView.

- (void)viewWillLayoutSubviews 

Когда изменение границ в целях, в виде регулирует положение его подвидов. Контроллер вашего вида может переопределить этот метод, чтобы сделать изменения до того, как представление отобразит его подпункты. По умолчанию реализация этого метода ничего не делает.

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

Смежные вопросы