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 是一个放到navigation controller 里的view, navigation bar 也一样, 所以它俩之间是平级的, 并不是说navigation bar 是self.view 的子view,自然也就没有办法计算navigation bar里的子项目在self.view 里的位置。
我想你想算的应该是 item 在 window 或者在 navigationController.view 中的位置吧?
你可以用 view debugging 看一下各个 view 之间的层级关系。
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 就是你需要的
迷茫2017-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];
这样确实是可以获取到正确的位置;但由于在ipad上测试发现,同样的代码,得到的结果却是{{0, 0}, {44, 44}}.这貌似又引出了一个新的问题:为何在iPhone 上是正确的,在ipad上却不正确呢?