2014-02-24 2 views
1

Вот моя проблема:IPad ошибка пейзаж влево отличается от пейзажа прямо

в моем IPad Split View Controller я имею деталь полной TextFields, от до Панели навигации конца представления. Теперь я использую делегаты для анимации представления, чтобы пользователь мог писать, не скрывая клавиатуру текстовых полей. Это код в (void)textFieldDidBeginEditing:

CGFloat animatedDistance; 
static const CGFloat KEYBOARD_ANIMATION_DURATION = 0.3; 
static const CGFloat MINIMUM_SCROLL_FRACTION = 0.2; 
static const CGFloat MAXIMUM_SCROLL_FRACTION = 0.8; 
static const CGFloat PORTRAIT_KEYBOARD_HEIGHT = 216; 
static const CGFloat LANDSCAPE_KEYBOARD_HEIGHT = 162; 

CGRect textFieldRect = 
    [self.view.window convertRect:textField.bounds fromView:textField]; 
    CGRect viewRect = 
    [self.view.window convertRect:self.view.bounds fromView:self.view]; 

    CGFloat midline = textFieldRect.origin.y + 0.5 * textFieldRect.size.height; 
    CGFloat numerator = 
    midline - viewRect.origin.y 
    - MINIMUM_SCROLL_FRACTION * viewRect.size.height; 
    CGFloat denominator = 
    (MAXIMUM_SCROLL_FRACTION - MINIMUM_SCROLL_FRACTION) 
    * viewRect.size.height; 
    CGFloat heightFraction = numerator/denominator; 

    if (heightFraction < 0.0) 
    { 
     heightFraction = 0.0; 
    } 
    else if (heightFraction > 1.0) 
    { 
     heightFraction = 1.0; 
    } 

    //CGRect viewFrame = self.view.frame; 
    CGRect viewFrame = view.frame; 

    UIInterfaceOrientation orientation = [[UIApplication sharedApplication] statusBarOrientation]; 
    if (orientation == UIInterfaceOrientationPortrait || 
     orientation == UIInterfaceOrientationPortraitUpsideDown) 
    { 
     animatedDistance = floor(PORTRAIT_KEYBOARD_HEIGHT * heightFraction); 

     if (detail) // iPad 
      viewFrame.origin.x += animatedDistance; 
     else // iPhone 
      viewFrame.origin.y -= animatedDistance; 
    } 
    else 
    { 
     animatedDistance = floor(LANDSCAPE_KEYBOARD_HEIGHT * heightFraction); 
     if(detail) 
      viewFrame.origin.y -= animatedDistance; 
     else 
      viewFrame.origin.x += animatedDistance; 
    } 

    [UIView beginAnimations:nil context:NULL]; 
    [UIView setAnimationBeginsFromCurrentState:YES]; 
    [UIView setAnimationDuration:KEYBOARD_ANIMATION_DURATION]; 

    [view setFrame:viewFrame]; 
    [UIView commitAnimations]; 

и она прекрасно работает на UIInterfaceOrientationLandscapeLeft, но на UIInterfaceOrientationLandscapeRight последние 2 TextFields не анимированы и я не могу понять, почему!

Перед любыми комментариями ДА i ctrl-перетащил делегата из каждого textFields, и я говорю, чем на UIInterfaceOrientationLandscapeLeft У меня нет проблем. Просто, если я меняю ориентацию, только последние 2 не перемещаются.

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

ответ

0

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

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