タブバーとナビバーを複合したアプリを作ったので、ナビゲーションで画面遷移した後、タブバーで画面遷移すると一つ前の状態(下の階層)から表示されてしまうので、常にルートから表示するようにできないか悩んでました。

・・・。

ありました!!


- (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController {

if ([viewController isKindOfClass:[UINavigationController class]]) {
UINavigationController *navigationController = (UINavigationController *)viewController;
[navigationController popToRootViewControllerAnimated:NO];
}
}


たったこれだけ!
TabBarControllerを管理するクラスでUITabBarControllerDelegateを実装し、タブ選択時にコールされるtabBarController:didSelectViewController:内で、選択されたタブに対応するViewControllerがNavigationViewControllerである場合にはRootViewを表示するといった流れ~

簡単に解決しました^^


後、画像のタップズームを実装してたのですが、なぜかタップした位置と中心がずれる・・・。

なぜ!!!
ちゃんと計算してるのに!


- (CGRect)zoomRectForScrollView:(UIScrollView *)__scrollView withScale:(float)scale withCenter:(CGPoint)center {

CGRect zoomRect;

zoomRect.size.height = __scrollView.frame.size.height / scale;
zoomRect.size.width = __scrollView.frame.size.width / scale;

zoomRect.origin.x = center.x - (zoomRect.size.width / 2.0);
zoomRect.origin.y = center.y - (zoomRect.size.height / 2.0);

return zoomRect;
}


原因判明・・・

[self zoomRectForScrollView:zoomScroll
withScale:2.0
withCenter:[sender locationInView:nil]];

これ!
正しくは
[self zoomRectForScrollView:zoomScroll
withScale:2.0
withCenter:[sender locationInView:imageView]];

locationInView:に対象のimageView渡し忘れてた^^;

こんな時もあるよね♩

と、すっきりしたので、寝まーすzzz