Ориентация Клавиатура Движение - PullRequest
2 голосов
/ 25 марта 2011

Вот несколько отличных уроков по портрету движению в текстовом поле.

Один Два Три

My View, с другой стороны, поворачивается как в книжную, так и в альбомную ориентацию, и в обеих ориентациях клавиатура скрывает текстовое поле ... Прямо сейчас работают как книжная, так и One альбомной ориентации.

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

Вот что я делаю:

-(void) keyboardWillShow:(NSNotification *)notif{
 if ([serverIP isFirstResponder]){
    if (isPortrait && self.view.frame.origin.y >= 0){
        [self setViewMovedVertical:YES];
    }
    else if (!isPortrait && self.view.frame.origin.x >= 0){
        [self setViewMovedHorizontal:YES];
    }
 }
}

Чтобы переместить вид.Вот соответствующие методы

#define PORTRAIT_KEY_OFF 216
#define LANDSCAPE_KEY_OFF 140

-(void) setViewMovedVertical:(BOOL)movedUp{
 [UIView beginAnimations:nil context:NULL];
 [UIView setAnimationDuration:0.4];

 CGRect rect = self.view.frame;

 if (movedUp){
     rect.origin.y -= PORTRAIT_KEY_OFF;
     rect.size.height += PORTRAIT_KEY_OFF;
 }
 else{
     rect.origin.y += PORTRAIT_KEY_OFF;
     rect.size.height -= PORTRAIT_KEY_OFF;
 }

 self.view.frame = rect;

 [UIView commitAnimations];
}

-(void) setViewMovedHorizontal:(BOOL)moved{
 [UIView beginAnimations:nil context:NULL];
 [UIView setAnimationDuration:0.4]; 

 CGRect rect = self.view.frame;

 if (moved){
     rect.origin.x -= LANDSCAPE_KEY_OFF;
     rect.size.width += LANDSCAPE_KEY_OFF;
 }
 else{
     rect.origin.x += LANDSCAPE_KEY_OFF;
     rect.size.width -= LANDSCAPE_KEY_OFF;
 }

 self.view.frame = rect;

 [UIView commitAnimations];

}

И вот метод, чтобы переместить его обратно вниз

-(IBAction) serverIPDone: (UITextField *) sender{
if ([serverIP isFirstResponder]){
 if (self.view.frame.origin.y < 0){
    [self setViewMovedVertical:NO];
 }
 if (self.view.frame.origin.x < 0){
    [self setViewMovedHorizontal:NO];   
 }
 [serverIP resignFirstResponder];
}
}

Надеюсь, вы можете помочь!Если я поставил вопрос (см. Что я там сделал?), Пожалуйста, дайте мне знать!

1 Ответ

2 голосов
/ 18 апреля 2011

НАКОНЕЦ Понял это !!!!

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

-(IBAction) serverIPDone: (UITextField *) sender{
if ([serverIP isFirstResponder]){
        if (self.view.frame.origin.y < 0){
            [self setViewMovedVertical:NO];
        }
    if (self.view.frame.origin.x != 0){
        [self setViewMovedHorizontal:NO];   
    }
    [serverIP resignFirstResponder];
}
}

Предыдущий гарантирует, что клавиатура не установлена.

-(void) setViewMovedVertical:(BOOL)movedUp{
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:0.4];

CGRect rect = self.view.frame;

if (movedUp){
    rect.origin.y -= PORTRAIT_KEY_OFF;
    rect.size.height += PORTRAIT_KEY_OFF;
}
else{
    rect.origin.y += PORTRAIT_KEY_OFF;
    rect.size.height -= PORTRAIT_KEY_OFF;
}

self.view.frame = rect;

[UIView commitAnimations];
}

-(void) setViewMovedHorizontal:(BOOL)moved{
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:0.4]; 

CGRect rect = self.view.frame;

if (moved){
    if (leftLandscape)
        rect.origin.x -= LANDSCAPE_KEY_OFF;
    else
        rect.origin.x += LANDSCAPE_KEY_OFF;
}
else{
    if (leftLandscape)
        rect.origin.x += LANDSCAPE_KEY_OFF;
    else
        rect.origin.x -= LANDSCAPE_KEY_OFF;
    NSLog(@"after: %f",rect.origin.x);

}

self.view.frame = rect;

[UIView commitAnimations];

}

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

- (void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)x     
                                     duration:(NSTimeInterval)duration{

if (UIInterfaceOrientationIsPortrait(x)) {
    isPortrait = TRUE;  
} 
else { 
    isPortrait = FALSE;
            leftLandscape = (x == UIInterfaceOrientationLandscapeLeft); 
}

}

Предыдущий обеспечит правильную установку переменных isPortrait и leftLandscape.

Это заняло слишком много времени, но я наконец-то СОВЕРШЕНО !!!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...