3

メールをチェックしていることを示すために表示されるGmailアカウントのようなステータスバーをiPhoneの下部に表示したい. このスレッドで次の解決策を試し ました iPhoneのステータスバーにビューを追加する

しかし、ステータスバーが表示されなかったので、同じコードを変更せずに使用して、デフォルトのステータスバーの上部に表示しましたが、表示されませんでした。

MTStatusBarOverlayを使用して別のソリューションも試しました。フレームを下部に変更しようとすると、画面の中央に黒い四角形が表示されます

助けはありますか?

ここにコードがあります

// new class i have created
@interface BottomStatusBarOverlay :  UIWindow

@end

@implementation BottomStatusBarOverlay
- (id)initWithFrame:(CGRect)frame {
    if ((self = [super initWithFrame:frame])) {
        // Place the window on the correct level and position
        self.windowLevel = UIWindowLevelStatusBar+1.0f;
        self.frame = [[UIApplication sharedApplication] statusBarFrame];
        self.alpha = 1;
        self.hidden = NO;
        // Create an image view with an image to make it look like a status bar.
        UIImageView *backgroundImageView = [[UIImageView alloc] initWithFrame:self.frame];
        backgroundImageView.image = [[UIImage imageNamed:@"statusBarBackgroundGrey.png"] stretchableImageWithLeftCapWidth:2.0f topCapHeight:0.0f];
        [self addSubview:backgroundImageView];
    }
    return self;
}
@end

// usage in my view controller in a button action
@implementation MainViewController
-(IBAction)showBottomStatusbar:(id)sender {
    BottomStatusBarOverlay *bottomStatusBarOverlay = [[BottomStatusBarOverlay alloc] init];
    bottomStatusBarOverlay.hidden = NO;
}
4

1 に答える 1

2

投稿したコードは、 showBottomStatusbar メソッドが BottomStatusBarOverlay インスタンスを作成することを示していますが、実際にはそれをサブビューとして何かに追加することはありません。

iPhone で Gmail アプリを使用していません。そのため、見た目も機能もよくわかりません。ただし、過去に、あなたが説明したものと同様の通知バーを作成しました。画面の下部にアニメーションが表示され、メッセージが 3 秒間表示された後、スライドして元に戻ります。アプリケーションのウィンドウにバーを追加することでこれを実現しました。これにより、アプリケーションが現在表示しているビューを確実にオーバーレイできます。ただし、アプリ内でグローバル バーが必要ない場合は、現在アクティブな任意のビューにバーを追加できます。アプリのウィンドウ参照を取得する方法は次のとおりです。

UIApplication* app = [UIApplication sharedApplication];
UIWindow* appWin = app.delegate.window;

アニメーション化するには、次のように animateWithDuration を使用できます。

[UIView animateWithDuration:0.3 
                 animations:^ { 
                     // However you want to animate on to the screen.
                     // This will slide it up from the bottom, assuming the
                     // view's start position was below the screen.
                     view.frame = CGRectMake(0, 
                                             winHeight - viewHeight, 
                                             winWidth, 
                                             viewHeight);
                 }
                 completion:^(BOOL finished) {
                     // Schedule a timer to call a dismiss method after
                     // a set period of time, which would probably perform
                     // an animation off the screen.
                     dismissTimer = [NSTimer 
                                     scheduledTimerWithTimeInterval:3
                                     target:globalMessage
                                     selector:@selector(dismiss)
                                     userInfo:nil
                                     repeats:NO];
                 }];

お役に立てれば。

于 2012-05-15T21:18:58.960 に答える