繁体   English   中英

活动指示器视图不旋转

[英]Activity Indicator View not spinning

我在下面的代码中,我正在Webview中加载一些链接。

- (void)viewDidLoad
{
    mySpinner = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray];
    [self openWebPage:fileName];
    [self.view addSubview:myWebView];
    [self.view addSubview:mySpinner];
    mySpinner.center = CGPointMake(self.view.frame.size.width / 2.0, 100);
}

-(void)openWebPage:(NSString*)address {
    NSURL*url=[NSURL URLWithString:address];
    NSURLRequest*request=[NSURLRequest requestWithURL:url];
    myWebView.scalesPageToFit = NO;

    [myWebView loadRequest:request];
}

- (void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error {

    UIAlertView *errorView = [[UIAlertView alloc] initWithTitle:@"Error!!!" message:@"Please make sure you are connected to 3G or Wi-Fi." delegate:nil cancelButtonTitle:@"Dismiss" otherButtonTitles:nil, nil];
    [errorView show];
    mySpinner.hidden = YES;
    [mySpinner stopAnimating];
}


-(void)webViewDidStartLoad:(UIWebView *)webView2 {
    NSLog(@"webViewDidStartLoad");
    mySpinner.hidden = NO;
    [mySpinner startAnimating];
    NSLog(@"step 1");
    NSDate *future = [NSDate dateWithTimeIntervalSinceNow: 2 ];
    [NSThread sleepUntilDate:future];
    NSLog(@"step 2");
}

-(void)webViewDidFinishLoad:(UIWebView *)webView2 {
    NSLog(@"webViewDidFinishLoad");
    mySpinner.hidden = YES;
    [mySpinner stopAnimating];

}

我正在做的是在webViewDidStartLoad上,我正在显示微调器并开始使用[mySpinner startAnimating];动画[mySpinner startAnimating]; ,但没有旋转。 它只是保持原样(不旋转)。

知道出了什么问题吗?


编辑1

我有webview委托@interface WebDetailsViewController : UIViewController<UIWebViewDelegate>

我还添加了[NSThread sleepUntilDate:future]; 只是为了验证活动指示器视图是否在制作动画。

以下是我从NSLog获得的

2013-06-23 16:29:28.843 GulfLab[2048:907] webViewDidStartLoad
2013-06-23 16:29:28.845 GulfLab[2048:907] step 1
2013-06-23 16:29:30.847 GulfLab[2048:907] step 2
2013-06-23 16:29:31.836 GulfLab[2048:907] webViewDidFinishLoad

编辑2

好吧好问题在下面的线...

[UIView  beginAnimations: @"Showinfo"context: nil];
[UIView setAnimationCurve: UIViewAnimationCurveEaseInOut];
[UIView setAnimationDuration:0.75];
[self.navigationController pushViewController: secondView animated:NO];
[UIView setAnimationTransition:UIViewAnimationTransitionFlipFromRight forView:self.navigationController.view cache:NO];
[UIView commitAnimations];

以下是我所拥有的...

一个第一个视图控制器,我有一个按钮,当我单击那些按钮时,我将进入第二个视图控制器,并在其中显示基于所按按钮的Web文件。

我的客户想要第二种视图时需要一些效果,为此我在上面的代码中添加了效果。 但是正因为如此,我面临着活动问题。

知道我需要做什么更改吗?


在进一步调查中,我发现问题出在这条线...

[UIView setAnimationTransition:UIViewAnimationTransitionFlipFromRight forView:self.navigationController.view cache:NO];

但是我需要这条线,否则动画不会发生...

也是在今天,我注意到如果我触摸webview,那么它将开始动画

rr ...有人帮我

如果有人遇到指示器没有旋转的类似问题:

确保在情节Animating中设置了Animating属性。

活动指示器动画

由于您不在主UI线程上,因此可能无法对其进行动画处理。 尝试将其添加到主循环上的调度队列中,以将其强制在主循环上,并且它应该动画。

dispatch_async(dispatch_get_main_queue(), ^{
    [mySpinner startAnimating];
}];

尝试在alloc init之后放置此代码

mySpinner.hidesWhenStopped = false;

在代码中删除mySpinner.hidden = YES / NO;

只需添加[mySpinner setHidesWhenStopped:YES]; 在viewDidload

然后,您就可以开始和停止了。

- (void)viewDidLoad
{
    mySpinner = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray];
    [mySpinner setHidesWhenStopped:YES];//set Hidden here

    [self openWebPage:fileName];
    [self.view addSubview:myWebView];
    [self.view addSubview:mySpinner];
    [self.view bringSubviewToFront:mySpinner]; //Add if still not show
}

我真的认为[NSThread sleepUntilDate:future]; 在这种情况下,电话会杀死您。 我的大部分代码都是与第三方硬件集成的,该硬件将在某些情况下阻塞主线程,并且在发生这种情况时,我将具有与您类似的行为,即UI元素出现但处于稍微冻结的状态,直到我点击屏幕以“跳转开始” UI或阻止呼叫已完成。

如果您是我, sleepUntilDate摆脱sleepUntilDate调用,然后删除停止mySpinner的调用,以确保它实际上正在旋转,以便在遇到较长的webViewDidFinishLoad调用时,可以确保它可以正常工作。

这就是我在代码中使用微调框弹出窗口的方式。 并非您所要求的完全一样,但是有些相似。

在您的* .h文件中:

@interface v3ViewController : UIViewController 
{
    UIAlertView *megaAlert;
}

@property (nonatomic, retain) UIAlertView *megaAlert;

- (IBAction) invokeMegaAnnoyingPopup;
- (IBAction) dismissMegaAnnoyingPopup;

在您的* .m文件中:

@synthesize megaAlert;

- (IBAction) dismissMegaAnnoyingPopup
{
    [self.megaAlert dismissWithClickedButtonIndex:0 animated:YES];
    self.megaAlert = nil;
}

- (IBAction) invokeMegaAnnoyingPopup
{
    self.megaAlert = [[UIAlertView alloc] initWithTitle:@"Please wait..."
                                                message:nil delegate:self cancelButtonTitle:nil
                                      otherButtonTitles: nil];

    [self.megaAlert show];

    UIActivityIndicatorView *indicator = [[UIActivityIndicatorView alloc]
                                          initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhiteLarge];

    indicator.center = CGPointMake(130, 70);


    [indicator startAnimating];
    [self.megaAlert addSubview:indicator];
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM