背景に Default.png を表示し、前に UIProgressBar を表示する SplashView を作成しようとしました。しかし、スプラッシュ画面が更新されていません...
ビューコントローラー内で、最初に初期化のステップ数をパラメーターとしてスプラッシュビューをロードし、次に NSTimer を介して 2 番目のスレッドを開始し、初期化ステップごとに SplashView に新しい進行状況の値を表示するように指示します。
理論的にはすべて問題ないように見えますが、このアプリを実行すると進行状況バーが更新されません (スプラッシュ スクリーンのメソッドが値を受け取り、ログで確認できます)。usleep(10000); も追加しようとしました。その間にビューの更新に少し時間を割き、プログレス バーを使用する代わりに、ビューに直接描画して [self setNeedsDisplay] を呼び出しました。しかし、すべてがうまくいきませんでした:/
私は何を間違っていますか?
ご協力いただきありがとうございます!
トム
ここにいくつかのコードがあります:
スプラッシュスクリーン:
- (id)initWithFrame:(CGRect)frame withStepCount:(int)stepCount {
if (self = [super initWithFrame:frame]) {
// 初期化コード
background = [[UIImageView alloc] initWithFrame: [自己境界]];
[background setImage: [UIImage imageWithContentsOfFile: [NSString stringWithFormat:@"%@/%@", [[NSBundle mainBundle] resourcePath], @"Default.png"]]];
[自己 addSubview: 背景];
progressView = [[UIProgressView alloc] initWithProgressViewStyle:UIProgressViewStyleBar];
[progressView setFrame:CGRectMake(60.0f, 222.0f, 200.0f, 20.0f)];
[progressView setProgress: 0.0f];
stepValue = 1.0f / (フロート)stepCount;
[self addSubview:progressView];
}
自分自身を返します。
}
- (ボイド)ティック {
値 += stepValue;
[progressView setProgress: 値];
}
ビューコントローラー:
- (id)initWithNibName:(NSString *)nibNameOrNil バンドル:(NSBundle *)nibBundleOrNil {
if (self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]) {
SplashView = [[SplashView alloc] initWithFrame: CGRectMake(0.0f, 0.0f, 320.0f, 480.0f) withStepCount:9];
[自己 setView: スプラッシュ ビュー];
NSTimer* delayTimer;
delayTimer = [NSTimer scheduleTimerWithTimeInterval:0.05 target:self selector:@selector(finishInitialization) userInfo:nil repeats:NO];
}
自分自身を返します。
}
- (無効)finishInitialization {
// 割り当て、データベースのオープン、ビューの作成、重い処理などを行います...
[splashView ティック]; // これにより進行状況バーが更新されます...
// 割り当て、データベースのオープン、ビューの作成、重い処理などを行います...
[splashView ティック]; // これにより進行状況バーが更新されます...
// init done... 正しいビューを設定し、SplashView を解放します
}