活动指示器直到加载下一个视图

问题描述 投票:0回答:4

在我的

firstViewController
中有一个
UIButton
(图库按钮),在我的
secondViewController
中有一个
UITableView
。当用户点击 GalleryButton 时,需要 2-3 秒的时间来打开
secondViewController
并加载图像。我想显示
UIActivityIndicator
直到加载
secondViewController
。怎么办??

ios swift uitableview uiactivityindicatorview
4个回答
3
投票

您应该在后台线程中加载图像并在主线程中显示

UIActivityIndicator
。我已经在这里回复了类似的问题:https://stackoverflow.com/a/41529056/1370336

// Main thread by default: 
// show progress bar here.

DispatchQueue.global(qos: .background).async {
    // Background thread:
    // start loading your images here

    DispatchQueue.main.async {
        // Main thread, called after the previous code:
        // hide your progress bar here
    }
}

1
投票

在第二个视图控制器中以编程方式创建活动指示器

    var activityIndicator = UIActivityIndicatorView(activityIndicatorStyle: UIActivityIndicatorViewStyle.Gray)

在第二个视图控制器的viewDidLoad()中添加以下代码

   activityIndicator.hidesWhenStopped = true
   activityIndicator.center = view.center
   activityIndicator.startAnimating() //For Start Activity Indicator

当数据完全填充到表格视图中时,添加以下代码以停止活动指示器

   activityIndicator.stopAnimating() //For Stop Activity Indicator

1
投票

这对我有用

#import "ViewController.h"
#import "NextVC.h"
@interface ViewController ()
@property (weak, nonatomic) IBOutlet UIActivityIndicatorView *aiStart;

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    self.aiStart.hidden = YES;
}

- (void)viewDidDisappear:(BOOL)animated{
    [super viewDidDisappear:animated];
    self.aiStart.hidden = YES;
    [self.aiStart stopAnimating];
}

- (IBAction)btnShowNextVCTapped:(id)sender {
    dispatch_async(dispatch_get_main_queue(), ^{

        self.aiStart.alpha = 0;
        self.aiStart.hidden = NO;
        [self.aiStart startAnimating];

        [UIView animateWithDuration:0.3 animations:^{
            self.aiStart.alpha = 1;
        } completion:^(BOOL finished) {
            NextVC* nextVC = [self.storyboard instantiateViewControllerWithIdentifier:@"NextVC"];

            [self presentViewController:nextVC animated:YES completion:nil];
        }];
    });


}

0
投票

在要显示加载微调器的视图控制器中设置以下内容。

1。创建活动指示器:

let activityIndicatorView: UIActivityIndicatorView = {
        let indicator = UIActivityIndicatorView(style: .large)
        indicator.color = .black
        indicator.translatesAutoresizingMaskIntoConstraints = false
        return indicator
    }()

2。配置指标:

func configureLoadingIndicator() {
    view.addSubview(activityIndicatorView)
    activityIndicatorView.centerXAnchor.constraint(equalTo: view.centerXAnchor).isActive = true
    activityIndicatorView.centerYAnchor.constraint(equalTo: view.centerYAnchor).isActive = true
}

如果您愿意,您可以进行更多自定义。

3.在viewWillAppear中开始加载:

override func viewWillAppear(_ animated: Bool) {
    super.viewDidAppear(animated)
    activityIndicatorView.startAnimating()
}

4。在viewDidLoad中停止加载:

可能是当您重新加载 tableView 等时。

override func viewDidLoad() {
    super.viewDidLoad()
    DispatchQueue.main.async {
        self?.tableView.reloadData()
        self?.activityIndicatorView.stopAnimating()
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.