2

複数のビュー コントローラーで表示できるカスタム ビューが必要です。UIAlertView と同じように設定して、初期化し、[myView show] を呼び出して現在のビュー コントローラーに追加します。カスタム uiview をそのクラスから現在のビュー コントローラーに直接追加する方法を知りたいです。また、ビューは一定の時間が経過すると自動的に消えます (基本的に、カスタム ビューは、フェードアウトする前の短い時間にいくつかの統計を表示する画像のアニメーションです)。

クラス メソッド [myView show] から呼び出すと、ビューを初期化する必要がなくなり、[self.view addSubview:myView] を呼び出します。

カスタムビューをクラスから直接表示/削除するための最良のアプローチは何ですか?

4

2 に答える 2

4

私はjsdに別の方法を取り、それをビューに追加しました。窓の方がいいかもしれません。しかし、このコードは、私が試したときに必要なことをしているように見えました:

@implementation EWView

+ (void)show:(UIView *)superView {
    EWView *instantView = [[EWView alloc]initWithFrame:CGRectMake(20, 20, 50, 50)];
    instantView.backgroundColor = [UIColor greenColor];
    [superView addSubview:instantView];
    int64_t delayInSeconds = 4.0;
    dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, delayInSeconds * NSEC_PER_SEC);
    dispatch_after(popTime, dispatch_get_main_queue(), ^(void){
        [instantView removeFromSuperview];
    });
}

@end

そして私はそれを UIViewController から呼び出しました

[EWView show:self.view];

ビューは、ブロックの実行が終了していない間のみ存在し続けます。ブロックが終了すると、EWView の割り当てが解除されます。

于 2012-12-04T20:09:47.893 に答える
2

UIAlertView とその仲間は、現在のビュー コントローラーのビューではなく、UIWindow のビューに自分自身を追加します。それがあなたがすべきことです。

それらが常に所定の時間にフェードアウトすることがわかっている場合は、ブロックを作成して削除を行い、dispatch_after() を使用できます。-performSelector:withObject:afterDelay: のように、遅延後にブロックをトリガーする方法を参照してください。

于 2012-12-04T19:55:57.863 に答える