как установить изображение для элемента панели вкладок, когда контроллер панели вкладок поддерживает все ориентации в iPhone

Я новичок в разработке IOS. Я столкнулся с проблемой динамической настройки изображений для элементов Tabbar. Я создал подкласс UITabbarItem.

@interface CustomTabBarItem : UITabBarItem
{
    UIImage *customHighlightedImage;
    UIImage *customStdImage;
}

@property (nonatomic, retain) UIImage *customHighlightedImage;
@property (nonatomic, retain) UIImage *customStdImage;

@end 

И добавил мой tabbarcontroller в окно.

[_tabBarController setViewControllers: [[NSArray alloc] initWithObjects:1,2,3,4,nil] animated: YES];
_tabBarController.selectedIndex = 0;
_tabBarController.delegate = self;
_tabBarController.view.backgroundColor=[UIColor colorWithPatternImage:[UIImage imageNamed:@"tabbarBackground.png"]];
[self.window addSubview:_tabBarController.view];
self.window.rootViewController = _tabBarController;
[self.window makeKeyAndVisible];

Мой контроллер Tabbar отлично поддерживает все ориентации. Но проблема в том, что когда я поворачиваю устройство, как я могу установить изображения элементов панели вкладок для текущей ориентации устройства. Рамка автоматически устанавливается для каждой вкладки, но мои изображения - нет. У меня есть четыре вкладки в моем приложении. Я много искал на сайте, но не смог найти подходящего решения.

РЕДАКТИРОВАТЬ

Это код, который я использую для установки изображений.

 tabBarItemBrowse=[[CustomTabBarItem alloc] init];
    tabBarItemBrowse.imageInsets=UIEdgeInsetsMake(6, 0, -6, 0);
    //    tabBarItemBrowse.customStdImage=[UIImage imageNamed:@"browser.png"];
    //    tabBarItemBrowse.customHighlightedImage=[UIImage imageNamed:@"browser_act.png"];
    if ( [UIApplication sharedApplication].statusBarOrientation==UIInterfaceOrientationPortrait ||  [UIApplication sharedApplication].statusBarOrientation == UIInterfaceOrientationPortraitUpsideDown)
    {
        tabBarItemBrowse.customStdImage=[UIImage imageNamed:@"browser.png"];
        tabBarItemBrowse.customHighlightedImage=[UIImage imageNamed:@"browser_act.png"];
    }

    else
    {
        tabBarItemBrowse.customStdImage=[UIImage imageNamed:@"browser568.png"];
        tabBarItemBrowse.customHighlightedImage=[UIImage imageNamed:@"browser_act568.png"];

    }
    self.viewController = [[ViewController alloc] initWithNibName:@"ViewController" bundle:nil];
    BrowseNav  = [[CustomNavigationControllerViewController alloc] initWithRootViewController:self.viewController];
    BrowseNav.tabBarItem = tabBarItemBrowse;
    BrowseNav.navigationBar.tintColor = [UIColor blackColor];
    BrowseNav.navigationBarHidden=YES;
    [tabBarItemBrowse release];

person Nikhil Lihla    schedule 04.02.2013    source источник
comment
пожалуйста, вставьте код, с помощью которого вы устанавливаете изображение   -  person Rajneesh071    schedule 04.02.2013
comment
проверьте свою ориентацию во всех контроллерах просмотра   -  person Rajneesh071    schedule 04.02.2013


Ответы (1)


Попробуйте это. Во-первых, вам нужно сделать два изображения, одно для портретного режима, а другое для ландшафтного. Когда ваше устройство меняет ориентацию, следует вызвать метод -(void)willRotateToInterfaceOrientation. В соответствии с ориентацией вы можете установить изображение элемента вкладки.

   -(void)willRotateToInterfaceOrientation: (UIInterfaceOrientation)orientation duration: (NSTimeInterval)duration
{
if (UIInterfaceOrientationIsPortrait(self.interfaceOrientation)) 
{

  yourViewController.tabBarItem.image = [UIImage imageNamed:@"portrait.png"] ;
}
 else

{

  yourViewController.tabBarItem.image = [UIImage imageNamed:@"Landscape.png"] ;

}

}
person Kalpesh    schedule 04.02.2013
comment
Спасибо за ответ. Но это установит изображение только для текущего контроллера. и мне нужно установить его для всех 4 вкладок. Я попробовал этот код, но он установил его только для текущего контроллера. - person Nikhil Lihla; 04.02.2013
comment
UIViewController *view= [self.tabBarController.viewControllers objectAtIndex:self.tabBarController.selectedIndex]; - person Kalpesh; 04.02.2013
comment
я попробовал это. но это не кажется полезным. Не знаю, что идет не так. - person Nikhil Lihla; 04.02.2013
comment
Спасибо чувак!! теперь он работает с небольшой модификацией, которую нужно было сделать в соответствии с кодом в моем приложении. большое спасибо. Вы спасли мой день. - person Nikhil Lihla; 04.02.2013