Làm thế nào để hiển thị chỉ báo hoạt động ở giữa màn hình iphone?


Câu trả lời:


148
UIActivityIndicatorView *activityView = [[UIActivityIndicatorView alloc]     
        initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhiteLarge];

    activityView.center=self.view.center;
    [activityView startAnimating];
    [self.view addSubview:activityView];

13
tôi cũng sẽ thêm activityView.autoresizingMask = UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleTopMargin | UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleBottomMargin; vào để có giao diện và xoay hướng ngang phù hợp
adsurbum

@adsurbum Cảm ơn bạn! Đó là chìa khóa khiến nó tập trung vào tất cả các kích thước màn hình iPhone từ SE đến 8 Plus! Trong Swift, đó là: activityView.autoresizingMask = [.flexibleLeftMargin, .flexibleTopMargin, .flexibleRightMargin, .flexibleBottomMargin, .flexibleWidth, .flexibleHeight]
balazs630

43

Nếu bạn đang sử dụng Swift, đây là cách bạn thực hiện

let activityView = UIActivityIndicatorView(activityIndicatorStyle: .whiteLarge)
activityView.center = self.view.center
activityView.startAnimating()

self.view.addSubview(activityView)

15

Đã cập nhật mã cho Swift 3

nhập mô tả hình ảnh ở đây

Mã Swift

import UIKit
class ViewController: UIViewController {

    let activityIndicator = UIActivityIndicatorView(activityIndicatorStyle: UIActivityIndicatorViewStyle.whiteLarge)

    @IBOutlet weak var myBlueSubview: UIView!

    @IBAction func showButtonTapped(sender: UIButton) {
        activityIndicator.startAnimating()
    }

    @IBAction func hideButtonTapped(sender: UIButton) {
        activityIndicator.stopAnimating()
    }

    override func viewDidLoad() {
        super.viewDidLoad()

        // set up activity indicator
        activityIndicator.center = CGPoint(x: myBlueSubview.bounds.size.width/2, y: myBlueSubview.bounds.size.height/2)
        activityIndicator.color = UIColor.yellow
        myBlueSubview.addSubview(activityIndicator)
    }
}

Ghi chú

  • Bạn có thể căn giữa chỉ báo hoạt động ở giữa màn hình bằng cách thêm nó làm chế độ xem phụ vào gốc viewthay vì thêm myBlueSubview.

    activityIndicator.center =  CGPoint(x: self.view.bounds.size.width/2, y: self.view.bounds.size.height/2)
    self.view.addSubview(activityIndicator)
    
  • Bạn cũng có thể tạo trong Trình tạo UIActivityIndicatorViewgiao diện. Chỉ cần kéo Chế độ xem chỉ báo hoạt động vào bảng phân cảnh và đặt thuộc tính. Hãy chắc chắn kiểm tra Ẩn Khi Dừng . Sử dụng ổ cắm để gọi startAnimating()stopAnimating(). Xem hướng dẫn này .

nhập mô tả hình ảnh ở đây

  • Hãy nhớ rằng màu mặc định của LargeWhitekiểu là màu trắng. Vì vậy, nếu bạn có nền trắng, bạn không thể nhìn thấy nó, chỉ cần thay đổi màu thành đen hoặc bất kỳ màu nào khác mà bạn muốn.

    activityIndicator.color = UIColor.black
    
  • Một trường hợp sử dụng phổ biến sẽ là trong khi một tác vụ nền chạy. Đây là một ví dụ:

    // start animating before the background task starts
    activityIndicator.startAnimating()
    
    // background task
    DispatchQueue.global(qos: .userInitiated).async {
    
        doSomethingThatTakesALongTime()
    
        // return to the main thread
        DispatchQueue.main.async {
    
            // stop animating now that background task is finished
            self.activityIndicator.stopAnimating()
        }
    }
    

13

Đây là cách chính xác:

UIActivityIndicatorView *activityIndicator = [[UIActivityIndicatorView alloc]initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray];
activityIndicator.center = CGPointMake(self.view.frame.size.width / 2.0, self.view.frame.size.height / 2.0);
[self.view addSubview: activityIndicator];

[activityIndicator startAnimating];

[activityIndicator release];

Thiết lập mặt nạ tự động lưu trữ của bạn nếu bạn hỗ trợ xoay. Chúc mừng !!!


4

Hãy thử cách này

UIActivityIndicatorView *activityIndicator = [[UIActivityIndicatorView alloc]initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray];
    activityIndicator.frame = CGRectMake(10.0, 0.0, 40.0, 40.0);
    activityIndicator.center = super_view.center;
    [super_view addSubview: activityIndicator];

[activityIndicator startAnimating];


4

Swift 4, phiên bản Autolayout

func showActivityIndicator(on parentView: UIView) {
    let activityIndicator = UIActivityIndicatorView(activityIndicatorStyle: .gray)
    activityIndicator.startAnimating()
    activityIndicator.translatesAutoresizingMaskIntoConstraints = false

    parentView.addSubview(activityIndicator)

    NSLayoutConstraint.activate([
        activityIndicator.centerXAnchor.constraint(equalTo: parentView.centerXAnchor),
        activityIndicator.centerYAnchor.constraint(equalTo: parentView.centerYAnchor),
    ])
}

1
Chào mừng bạn đến với S / O, câu trả lời của bạn không bao giờ được là mã 100% .. Luôn thêm một số giải thích.
Taslim Oseni

Không chắc đây có phải là quy tắc đen trắng hay không. Nếu phạm vi của câu hỏi đủ đơn giản và mã tự giải thích, tôi nghĩ rằng hoàn toàn ổn nếu có một câu trả lời chỉ có mã. Câu trả lời của @ Orkhan là đúng.
André Herculano

2

Bạn có thể đặt vị trí như thế này

        UIActivityIndicatorView *activityView = 
[[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhite];
activityView.frame = CGRectMake(120, 230, 50, 50);
[self.view addSubview:activityView];

Theo đó thay đổi kích thước khung hình .....


2

Nếu bạn muốn căn giữa con quay bằng cách sử dụng AutoLayout, hãy thực hiện:

UIActivityIndicatorView *activityView = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhiteLarge];
[activityView startAnimating];
[self.view addSubview:activityView];
[self.view addConstraint:[NSLayoutConstraint constraintWithItem:activityView
                                                      attribute:NSLayoutAttributeCenterX
                                                      relatedBy:NSLayoutRelationEqual
                                                         toItem:self.view
                                                      attribute:NSLayoutAttributeCenterX
                                                     multiplier:1.0
                                                       constant:0.0]];
[self.view addConstraint:[NSLayoutConstraint constraintWithItem:activityView
                                                      attribute:NSLayoutAttributeCenterY
                                                      relatedBy:NSLayoutRelationEqual
                                                         toItem:self.view
                                                      attribute:NSLayoutAttributeCenterY
                                                     multiplier:1.0
                                                       constant:0.0]];

2

Swift 3, xcode 8.1

Bạn có thể sử dụng tiện ích mở rộng nhỏ để đặt UIActivityIndicatorView ở trung tâm của UIView và các lớp UIView kế thừa:

extension UIActivityIndicatorView {

    convenience init(activityIndicatorStyle: UIActivityIndicatorViewStyle, color: UIColor, placeInTheCenterOf parentView: UIView) {
        self.init(activityIndicatorStyle: activityIndicatorStyle)
        center = parentView.center
        self.color = color
        parentView.addSubview(self)
    }
}

Cách sử dụng

let activityIndicator = UIActivityIndicatorView(activityIndicatorStyle: .whiteLarge, color: .gray,  placeInTheCenterOf: view)
activityIndicator.startAnimating()

Đầy đủ ví dụ

Trong ví dụ này, UIActivityIndicatorView được đặt ở giữa chế độ xem ViewControllers:

import UIKit

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
        let activityIndicator = UIActivityIndicatorView(activityIndicatorStyle: .whiteLarge, color: .gray,  placeInTheCenterOf: view)
        activityIndicator.startAnimating()
    }
}

extension UIActivityIndicatorView {

    convenience init(activityIndicatorStyle: UIActivityIndicatorViewStyle, color: UIColor, placeInTheCenterOf parentView: UIView) {
        self.init(activityIndicatorStyle: activityIndicatorStyle)
        center = parentView.center
        self.color = color
        parentView.addSubview(self)
    }
}

1

Đối với Swift 3, bạn có thể sử dụng như sau:

 func setupSpinner(){
    spinner = UIActivityIndicatorView(frame: CGRect(x: 0, y: 0, width: 40, height:40))
    spinner.color = UIColor(Colors.Accent)
    self.spinner.center = CGPoint(x:UIScreen.main.bounds.size.width / 2, y:UIScreen.main.bounds.size.height / 2)
    self.view.addSubview(spinner)
    spinner.hidesWhenStopped = true
}

0

Hy vọng điều này sẽ hiệu quả:

// create activity indicator 
UIActivityIndicatorView *activityIndicator = [[UIActivityIndicatorView alloc] 
    initWithFrame:CGRectMake(0.0f, 0.0f, 20.0f, 20.0f)];
[activityIndicator setActivityIndicatorViewStyle:UIActivityIndicatorViewStyleWhite];

...
 [self.view addSubview:activityIndicator];
// release it
[activityIndicator release];

0

? Nếu bạn muốn thử làm điều đó bằng cách sử dụng giao diện, bạn có thể xem video của tôi về điều này . Bằng cách này, bạn không cần phải viết bất kỳ mã nào để hiển thị Chỉ báo hoạt động ở giữa màn hình iPhone.


0
import UIKit

class ViewController: UIViewController {

    @IBOutlet weak var textLbl: UILabel!

    var containerView = UIView()
    var loadingView = UIView()
    var activityIndicator = UIActivityIndicatorView()

    override func viewDidLoad() {
        super.viewDidLoad()

        let _  = Timer.scheduledTimer(withTimeInterval: 10, repeats: false) { (_) in
            self.textLbl.text = "Stop ActivitiIndicator"
            self.activityIndicator.stopAnimating()
            self.containerView.removeFromSuperview()
        }
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
    }

    @IBAction func palyClicked(sender: AnyObject){

        containerView.frame = self.view.frame
        containerView.backgroundColor = UIColor(red: 0/255, green: 0/255, blue: 0/255, alpha: 0.3)
        self.view.addSubview(containerView)

        loadingView.frame = CGRect(x: 0, y: 0, width: 80, height: 80)
        loadingView.center = self.view.center
        loadingView.backgroundColor = UIColor(red: 0/255, green: 0/255, blue: 0/255, alpha: 0.5)
        loadingView.clipsToBounds = true
        loadingView.layer.cornerRadius = 10
        containerView.addSubview(loadingView)

        activityIndicator.frame = CGRect(x: 0, y: 0, width: 40, height: 40)
        activityIndicator.activityIndicatorViewStyle = UIActivityIndicatorViewStyle.whiteLarge
        activityIndicator.center = CGPoint(x:loadingView.frame.size.width / 2, y:loadingView.frame.size.height / 2);
        activityIndicator.startAnimating()
        loadingView.addSubview(activityIndicator)

    }
}

Cảm ơn Thongchai! Bạn có thể thêm một số văn bản bổ sung giải thích mã của bạn?
Brandon Minnick

-1

Tôi đã tìm thấy một cách để hiển thị Chỉ báo hoạt động với mã tối thiểu:

trước hết hãy nhập Bộ giao diện người dùng của bạn

import UIKit;

Sau đó, bạn phải bắt đầu chỉ báo hoạt động

let activityIndicator:UIActivityIndicatorView = UIActivityIndicatorView();

Sau đó, chỉ cần sao chép, dán các hàm này bên dưới là các hàm tự giải thích và gọi chúng bất cứ khi nào bạn cần:

func startLoading(){
    activityIndicator.center = self.view.center;
    activityIndicator.hidesWhenStopped = true;
    activityIndicator.activityIndicatorViewStyle = UIActivityIndicatorViewStyle.gray;
    view.addSubview(activityIndicator);

    activityIndicator.startAnimating();
    UIApplication.shared.beginIgnoringInteractionEvents();

}

func stopLoading(){ 

    activityIndicator.stopAnimating();
    UIApplication.shared.endIgnoringInteractionEvents();

}
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.