2016-10-08 4 views
1

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

Для UIButton я могу сделать:

myCustomTransition.startingPoint = buttonPressed.center 

Но если я хочу использовать UIBarButtonItem, как на самом деле сказать, мой переход, чтобы начать от центра кнопки, потому что я не вижу center недвижимость на UIBarButtonItem.

Любые предложения?

+0

Вам нужно разместить кнопку в центре навигационной панели, не так ли? – vaibhav

+0

@vaibhav: нет, моя кнопка справа, мне просто нужно знать ее позицию, но из того, что я читаю, нет никакого способа получить доступ к границам на UIBarButtonItem. – Kobe

+0

в порядке, если вы просто разместите 'UIView' в центре навигационной панели и разворачиваете его до конца вправо и влево, а затем переходите для получения границ. – vaibhav

ответ

1

Если вы просто используете UIBarButtonItem, как navigationItem.leftBarButtonItem или navigationItem.rightBarButtonItem, вы не можете напрямую попасть геометрии свойства, потому что UIBarButtonItem не наследует UIView, но в конечном итоге вы можете получить геометрию свойство, используя хитрый метод.

Это иерархия простой ViewController что левый и правый UIBarButtonItem:

enter image description here

UINavigationButton ваша цель, получить его прямоугольник, и вы можете получить в центре, что вам нужно.

- (void)handleItemPressed { 
UIView *targetView = nil; 
for (UIView *subView in self.navigationController.navigationBar.subviews) { 
    if ([subView isKindOfClass:NSClassFromString(@"UINavigationButton")]) { 
     for (UILabel *label in subView.subviews) { 
      if ([label isKindOfClass:[UILabel class]]) { 
       if ([label.text isEqualToString:"right"]) { 
        targetView = subView; 
        break; 
       } 
      } 
     } 
    } 
} 

CGRect rect = [targetView convertRect:targetView.frame toView:self.view]; 
CGPoint center_you_need = CGPointMake(CGRectGetMidX(rect), CGRectGetMidY(rect)); 
} 

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

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