Проблема с изображением, которое всегда в первом плане - PullRequest
0 голосов
/ 05 августа 2011

так что у меня есть приложение панели вкладок, и я добавил эффект, похожий на твитер, когда вы нажимаете кнопку на панели вкладок, когда стрелка перемещается к выбранной кнопке, это действительно крутая «анимация» Но проблема в том, что эта стрелка всегда в моем первом плане, когда (например) я хочу воспроизвести видео в полноэкранном режиме, стрелка уже есть, чтобы, когда я переключаюсь на другой вид без какой-либо панели вкладок, стрелка все еще там ...

Мой код находится в AppDelegate. в .h у меня есть это:

AppDelegate : NSObject <UIApplicationDelegate, UITabBarControllerDelegate> {

UIImageView *tabBarArrow;

}

@property (nonatomic, retain) IBOutlet UIWindow *window;

@property (nonatomic, retain) IBOutlet UITabBarController *tabBarController;

@property (nonatomic, retain) UIImageView *tabBarArrow;


- (CGFloat) horizontalLocationFor:(NSUInteger)tabIndex;
- (void) addTabBarArrow;

и по моему .m:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    // Override point for customization after application launch.
    _tabBarController.delegate = self;
    // Add the tab bar controller's current view as a subview of the window

    self.window.rootViewController = self.tabBarController;
    [self addTabBarArrow];
    [self.window makeKeyAndVisible];
    return YES;
}

-(void) addTabBarArrow {
    UIImage* tabBarArrowImage = [UIImage imageNamed:@"Arrow.png"];
    self.tabBarArrow = [[[UIImageView alloc] initWithImage:tabBarArrowImage] autorelease];
    CGFloat verticalLocation = self.window.frame.size.height - _tabBarController.tabBar.frame.size.height
    - tabBarArrowImage.size.height + 6;
    tabBarArrow.frame = CGRectMake([self horizontalLocationFor:0], verticalLocation,
                                   tabBarArrowImage.size.width, tabBarArrowImage.size.height);

    [self.window addSubview:tabBarArrow];
}

-(void)tabBarController:(UITabBarController *)theTabBarController didSelectViewController:(UIViewController *)viewController{
    [UIView beginAnimations:nil context:nil];
    [UIView setAnimationDuration:0.2];
    CGRect frame = tabBarArrow.frame;
    frame.origin.x = [self horizontalLocationFor:_tabBarController.selectedIndex];
    tabBarArrow.frame = frame;
    [UIView commitAnimations];
}

-(CGFloat) horizontalLocationFor:(NSUInteger)tabIndex{
    CGFloat tabItemWidth = _tabBarController.tabBar.frame.size.width / _tabBarController.tabBar.items.count;
    CGFloat halfTabItemWidth = (tabItemWidth / 2.0) - (tabBarArrow.frame.size.width / 2.0);

    return (tabIndex * tabItemWidth) + halfTabItemWidth;
}

Я думаю, вот и все спасибо, что помогли мне, потому что я действительно не знаю, как это сделать ..

Ответы [ 2 ]

0 голосов
/ 05 августа 2011

Или попробуйте это в вашем UITabBarController классе:

- (void)hideTabBar
{
    for(UIView *view in self.view.subviews)
    {
        if([view isKindOfClass:[UITabBar class]])
        {
            view.hidden = YES;
            break;
        }
    }
}
0 голосов
/ 05 августа 2011

Я уверен, что это не то, что вы хотели знать, но здесь уже есть исходный код для этого http://www.cocoacontrols.com/platforms/ios/controls/bctabbarcontroller

В противном случае, если вы хотите адаптировать свою собственную логику, вам нужно будет скрыть вид изображения наконкретные изменения, такие как открытие полноэкранного фильма.

...