4

シングルタップでUINavigationBarを(カスタムアニメーションで)表示/非表示にするアプリケーションを作成しています。

2つの関数を作成しました(1つは表示用、もう1つは非表示用)。UINavigationBarを表示するための関数は完全に機能します。

- (void) showNavigationBar {
    [UINavigationBar beginAnimations:@"NavBarFadeIn" context:nil];
    self.navigationController.navigationBar.alpha = 0;
    [UINavigationBar setAnimationCurve:UIViewAnimationCurveEaseIn]; 
    [UINavigationBar setAnimationDuration:0.5];
    [UINavigationBar setAnimationTransition:UIViewAnimationOptionTransitionFlipFromTop
                                    forView:self.navigationController.navigationBar
                                      cache:YES];
    self.navigationController.navigationBar.alpha = 1;
    [UINavigationBar commitAnimations];
}

しかし、それを隠す機能は、たとえ同じであっても機能しません。UINavigationBarは、アニメーションなしで突然消えます。

- (void) hideNavigationBar {
    [UINavigationBar beginAnimations:@"NavBarFadeOut" context:nil];
    self.navigationController.navigationBar.alpha = 1;
    [UINavigationBar setAnimationCurve:UIViewAnimationCurveEaseIn]; 
    [UINavigationBar setAnimationDuration:0.5];
    [UINavigationBar setAnimationTransition:UIViewAnimationOptionTransitionCurlUp
                                    forView:self.navigationController.navigationBar
                                      cache:YES];
    self.navigationController.navigationBar.alpha = 0;
    [self.navigationController setNavigationBarHidden:YES animated:NO];
    [UINavigationBar commitAnimations];
}

呼びだし:

- (void)contentView:(ReaderContentView *)contentView touchesBegan:(NSSet *)touches
{   
    if( [[self navigationController] isNavigationBarHidden] == NO)
    {
    if (touches.count == 1) // Single touches only
    {
            UITouch *touch = [touches anyObject]; // Touch info
            CGPoint point = [touch locationInView:self.view]; // Touch location
            CGRect areaRect = CGRectInset(self.view.bounds, TAP_AREA_SIZE, TAP_AREA_SIZE);

            if (CGRectContainsPoint(areaRect, point) == false) return;
        }
        [mainToolbar hideToolbar];
        [mainPagebar hidePagebar]; // Hide

        [self hideNavigationBar];
        lastHideTime = [NSDate new];
    }
}

なぜこれが起こっているのかについて誰かが手がかりを持っていますか?

4

1 に答える 1

4

アニメーションコードを呼び出し[self.navigationController setNavigationBarHidden:YES animated:NO];ているが、ブーリアン値はアニメーション化できないため、これが発生しています。ブール値には「値の間」はありません。

[self.navigationController setNavigationBarHidden:YES animated:NO];アニメーションの後にスケジュールするメソッドを呼び出す必要があります

[UINavigationBar setAnimationDidStopSelector: @selector(myCoolMethod:)];
于 2012-05-23T11:45:43.960 に答える