2012-05-30 2 views
1

Мой код выглядит следующим образом:Как обновить UIView, когда происходит Ориентация?

- (void)viewDidLoad 
{ 
    [self setGridView]; 
} 
-(void)setGridView 
{ 
    CGRect frame; 
    frame .origin.x=0; 
    frame.origin.y=20; 
    frame.size.width=GRID_WEIGHT; 
    frame.size.height=GRID_HEIGHT; 
    GridView *ObjGridView=[[GridView alloc]initWithFrame:frame]; 

    [[NSBundle mainBundle ] loadNibNamed:@"GridView" owner:ObjGridView options:nil]; 
    [ObjGridView setGridViewFrame:frame]; 

    [self.view addSubview:ObjGridView.GridCellView]; 
    frame .origin.x+=GRID_WEIGHT; 
} 

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation 
{ 
    return YES; 
} 

Этот код добавляет подвид на вид и устанавливает рамки

Моя проблема: 1-Как я обновить мою точку зрения, когда ориентация (альбомная или книжная) бывает, , потому что я установил кадр подвью в режиме lanscape, и я тоже хочу использовать разумный вид в моем портрете. (в основном, где я называю этот метод (void) setGridView delegate)?

2-Как я знаю, мое подчинение превышает пределы представления, так что я могу обрабатывать subview в моем методе setGridView?

ответ

2

Метод 1.Below будет автоматически вызываться при изменении вашей ориентации. Выполняйте необходимые изменения в соответствии с каждой ориентацией.

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { 

if (interfaceOrientation == UIInterfaceOrientationPortrait) {} 

else if (interfaceOrientation == UIInterfaceOrientationLandscapeLeft) {} 

else if (interfaceOrientation == UIInterfaceOrientationLandscapeRight) {} 

else if (interfaceOrientation == UIInterfaceOrientationPortraitUpsideDown) {} 

return YES; 

} 

2.Вы должны знать ширину и высоту ваших видов и соответственно устанавливать рамки. Это неважно.

Надеюсь, это полезно.

+0

да, друг это сделал .. –

1

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

Я считаю, что вы можете быть в состоянии найти ответ на свой вопрос в разделе под названием «В ответ на Orientation Перемен» в рамках этого документа на Ресурсы разработчиков Apple:

http://developer.apple.com/library/ios/#featuredarticles/ViewControllerPGforiPhoneOS/RespondingtoDeviceOrientationChanges/RespondingtoDeviceOrientationChanges.html

Я надеюсь, что это поможет вам вывести решение вашей проблемы.

+0

может любой орган предложить мне, что, как я знаю, мое подчинение превышает пределы взгляда, так что я могу передать subview в моем методе? –

+0

помогите мне, ребята, к моей проблеме выше –

+0

Посмотрите мое сообщение ниже. –

0

В ответ на ваш questionsL

Что касается изменения размеров на изменение ориентации: Если вы установите пружины и распорки, соответственно, он должен AUTORESIZE автоматически, в качестве альтернативы вы можете сделать это в коде, как в ответ deamonsarea в

Чтобы проверить, превышает ли представление пределы просмотра, используйте CGRectContainsRect что-то вроде.

CGRect frame0 = self.view.bounds; 
CGRect frame1 = ObjGridView.frame; 
if(CGRectContainsRect(frame0,frame1)==NO){ 
    NSLog(@"exceeds bounds") 
} 

Также заметил, что вы не зовете [супер viewDidLoad] и этой линии

[[NSBundle mainBundle ] loadNibNamed:@"GridView" owner:ObjGridView options:nil]; 

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

0

Я нашел этот вопрос ища способ реагировать на изменение ориентации внутри самого UIView. В случае, если кто-нибудь еще ...

Если вы хотите, чтобы реагировать на изменение ориентации внутри UIView, а не UIViewController (для инкапсулирования или по другим причинам), вы можете использовать этот метод:

class MyView: UIView { 
    override func layoutSubviews() { 
    super.layoutSubviews() 
    println("orientation or other bounds-impacting change") 
    } 
} 
1

В viewDidLoad

[[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(OrientationChange:) name:UIDeviceOrientationDidChangeNotification object:nil]; 

Метод уведомления о том, что изменение ориентации: -

-(void)OrientationChange:(NSNotification*)notification 
{ 
    UIDeviceOrientation Orientation=[[UIDevice currentDevice]orientation]; 

    if(Orientation==UIDeviceOrientationLandscapeLeft || Orientation==UIDeviceOrientationLandscapeRight) 
    { 
     NSLog(@"Landscape"); 
    } 
    else if(Orientation==UIDeviceOrientationPortrait) 
    { 
     NSLog(@"Portrait"); 
    } 
}