gpt4 book ai didi

iPhone - 带进度条的启动画面

转载 作者:行者123 更新时间:2023-12-03 19:31:46 25 4
gpt4 key购买 nike

我尝试创建一个 SplashView,它在后台显示 Default.png,在前面显示 UIProgressBar。但启动画面并未更新...

在我的 View Controller 中,我首先加载初始 View ,其中包含初始化步骤的参数,然后通过 NSTimer 启动第二个线程,在每个初始化步骤之后,我告诉 SplashView 显示新的进度值。

理论上一切看起来都不错,但是当运行这个应用程序时,进度条没有更新(启动屏幕的方法接收值,我可以在日志中看到它)。我还尝试添加 usleep(10000);在这之间给 View 更新一点时间,并且我没有使用进度条,而是直接在 View 上绘制并调用 [self setNeedsDisplay];但一切都不起作用:/

我做错了什么?

感谢您的帮助!

汤姆

这是一些代码:

SPLASHSCREEN:- (id)initWithFrame:(CGRect)frame withStepCount:(int)stepCount {    if (self = [super initWithFrame:frame]) {        // Initialization code        background = [[UIImageView alloc] initWithFrame: [self bounds]];        [background setImage: [UIImage imageWithContentsOfFile: [NSString stringWithFormat:@"%@/%@", [[NSBundle mainBundle] resourcePath], @"Default.png"]]];        [self addSubview: background];        progressView = [[UIProgressView alloc] initWithProgressViewStyle:UIProgressViewStyleBar];        [progressView setFrame:CGRectMake(60.0f, 222.0f, 200.0f, 20.0f)];        [progressView setProgress: 0.0f];        stepValue = 1.0f / (float)stepCount;        [self addSubview:progressView];    }    return self;}- (void)tick {    value += stepValue;    [progressView setProgress: value];}VIEWCONTROLLER:- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {    if (self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]) {        splashView = [[SplashView alloc] initWithFrame: CGRectMake(0.0f, 0.0f, 320.0f, 480.0f) withStepCount:9];        [self setView: splashView];        NSTimer* delayTimer;        delayTimer = [NSTimer scheduledTimerWithTimeInterval:0.05 target:self selector:@selector(finishInitialization) userInfo:nil repeats:NO];    }    return self;}- (void)finishInitialization {    // do some stuff, like allocation, opening a db, creating views, heavy stuff...    [splashView tick]; // this should update the progress bar...    // do some stuff, like allocation, opening a db, creating views, heavy stuff...    [splashView tick]; // this should update the progress bar...    // init done... set the right view and release the SplashView}

最佳答案

正如另一个答案中提到的,在一段有限的时间内,当您的应用程序启动时,会显示 Default.png,您无法控制它。但是,如果在 AppDelegate 中创建一个显示相同 Default.png 的新 View ,则可以创建从原始 Default.png 到可添加进度条的 View 的无缝过渡。

现在,大概您已经创建了一个 View 或类似的 View ,并且您经常更新进度条,以便为用户提供一些反馈。这里的挑战是,您的 View 仅在调用它来执行绘制矩形时才被绘制。但是,如果您从 AppDelegate 转到 View Controller 的 viewDidLoad 的一些初始化代码,而运行循环没有机会确定哪些 View 需要调用 drawRect,那么您的 View 将永远不会显示其状态栏。

因此,为了完成您想要的任务,您必须确保调用drawRect,例如将大量初始化代码推送到其他线程或计时器任务中,或者您可以通过调用drawRect来强制绘制在设置上下文等之后,您自己。

如果您使用后台任务,请确保您的初始化代码是线程安全的。

关于iPhone - 带进度条的启动画面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1397426/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com