Maison > Questions et réponses > le corps du texte
1.我想做一个动画,需要知道rightBarButtonItem对应self.view中的位置,即:
CGPoint toPoint = [self.navigationController.navigationBar convertPoint:self.navigationItem.titleView.center toView:self.view];
但是获取到的位置坐标始终不正确:
2.问题是:
怎么能够获取到导航栏中的各个navigationItem对应在self.view中的位置呢?
迷茫2017-04-18 09:07:01
self.view est une vue placée dans le contrôleur de navigation, et la barre de navigation est la même, donc elles sont égales. Cela ne signifie pas que la barre de navigation est une sous-vue de self.view, donc naturellement il n'y a aucun moyen. pour le calculer. La position des sous-éléments dans la barre de navigation dans self.view.
Je pense que ce que vous voulez calculer, c'est la position de l'élément dans la fenêtre ou navigationController.view, n'est-ce pas ?
Vous pouvez utiliser le débogage des vues pour voir la relation hiérarchique entre les différentes vues.
PHPz2017-04-18 09:07:01
UIButton *btn = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, 44, 44)];
[btn setTitle:@"right" forState:UIControlStateNormal];
[btn setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:btn];
CGRect frameInNaviView = [self.navigationController.view convertRect:btn.frame fromView:btn.superview];
UIView *vShow = [[UIView alloc] initWithFrame:frameInNaviView];
vShow.backgroundColor = [UIColor redColor];
[self.navigationController.view addSubview:vShow];
frameInNaviView est ce dont vous avez besoin
迷茫2017-04-18 09:07:01
Après tests, il a été trouvé :
UIButton *btn = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, 44, 44)];
[btn setTitle:@"right" forState:UIControlStateNormal];
[btn setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:btn];
CGRect frameInNaviView = [self.navigationController.view convertRect:btn.frame fromView:btn.superview];
Cela peut en effet obtenir la bonne position ; mais après des tests sur l'iPad, il a été constaté que le même code obtenait le résultat {{0, 0}, {44, 44}}. Cela semble conduire à une autre nouvelle question. : Pourquoi est-ce correct sur iPhone mais pas sur iPad ?