Tôi có thể thay đổi kích thước của UIActivityIndicator không?


93

Bất kỳ kích thước nào tôi cung cấp cho nó trong khi phân bổ, nó chỉ hiển thị kích thước cố định. Có thể tăng nó lên không?

Mã:

activityIndicator = [[UIActivityIndicatorView alloc] initWithFrame:
                     CGRectMake(142.00, 212.00, 80.0, 80.0)];
[[self view] addSubview:activityIndicator];
[activityIndicator sizeToFit];
activityIndicator.autoresizingMask = (UIViewAutoresizingFlexibleLeftMargin |
                                      UIViewAutoresizingFlexibleRightMargin |
                                      UIViewAutoresizingFlexibleTopMargin |
                                      UIViewAutoresizingFlexibleBottomMargin);
activityIndicator.hidesWhenStopped = YES;
activityIndicator.activityIndicatorViewStyle = UIActivityIndicatorViewStyleWhiteLarge;

Câu trả lời:


50

Kích thước được cố định bởi phong cách. Đó là một phần tử giao diện được tiêu chuẩn hóa nên API không thích làm khó nó.

Tuy nhiên, bạn có thể thực hiện một biến đổi tỷ lệ trên nó. Tuy nhiên, không chắc điều đó sẽ ảnh hưởng đến nó như thế nào.

Chỉ từ quan điểm thiết kế giao diện người dùng, tốt hơn hết là bạn nên để nguyên những yếu tố tiêu chuẩn hóa chung này. Người dùng đã được dạy rằng các yếu tố nhất định xuất hiện ở một kích thước nhất định và chúng có nghĩa là những thứ cụ thể. Thay đổi giao diện tiêu chuẩn làm thay đổi ngữ pháp giao diện và gây nhầm lẫn cho người dùng.


14
Điều đó tuyệt vời trong những bối cảnh nhất định. Tuy nhiên, điều gì sẽ xảy ra nếu đây là một màn hình giật gân, và tất cả những gì bạn thấy là logo và có thể con quay nhỏ thiếu niên này ở giữa màn hình, nó trông hơi ngớ ngẩn. Tôi không thể tin rằng Apple nghĩ một kích thước phù hợp với tất cả thậm chí là một khái niệm trong các phần tử giao diện người dùng.
Ben Leggiero

6
@BenLeggiero Bạn không nói đến UIActivityIndicatorViewStyleWhiteLarge, mà thay vào đó là về kích thước nhỏ, phải không? Bởi vì tôi nghĩ rằng Largephiên bản này có một kích thước đẹp ngay cả trên một màn hình trống.
ý nghĩa quan trọng-

2
.whiteLargePhải không! cám ơn! Tôi cũng đặt UIActivityIndicatorView(frame: CGRect(x: 0, y: 0, width: 100, height: 100))activityIndicator.backgroundColor = UIColor(red: 255/255, green: 255/255, blue: 255/255, alpha: 0.38). Trên 6 + / 7 + màn hình, màn hình mặc định quá nhỏ
rockhammer 14/02

1
Nó sẽ trông mờ nếu bạn thực hiện chuyển đổi tỷ lệ để tăng kích thước.
Gandalf458

164

Phần sau sẽ tạo chỉ báo hoạt động rộng 15px:

#import <QuartzCore/QuartzCore.h>

...

UIActivityIndicatorView *activityIndicator = [[[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray] autorelease];
activityIndicator.transform = CGAffineTransformMakeScale(0.75, 0.75);
[self addSubview:activityIndicator];

Mặc dù tôi hiểu ý kiến ​​của câu trả lời của TechZen, nhưng tôi không nghĩ rằng việc điều chỉnh kích thước của UIActivityIndicator bằng một lượng tương đối nhỏ thực sự là vi phạm các thành ngữ giao diện tiêu chuẩn của Apple - cho dù chỉ báo hoạt động là 20px hay 15px sẽ không thay đổi cách hiểu của người dùng về những gì đang xảy ra.


1
và các chỉ số hoạt động là quá nhỏ trên iPad với việc có một ở giữa một WebView ...
hokkuk

4
Điều này dường như mở rộng quy mô pixel, vì vậy không may là không thể chấp nhận được với số lượng lớn.
prewett

68

Swift 3.0 & Swift 4.0

self.activityIndi.transform = CGAffineTransform(scaleX: 3, y: 3)

3
Chính xác những gì tôi cần. Đây phải là câu trả lời hàng đầu.
nocdib

Tôi thích các giải pháp một dòng cho các vấn đề đơn giản! Bây giờ vấn đề duy nhất là làm thế nào để chống lại bí danh đó. Tại gấp đôi kích thước của nó trông thô chút trên Apple TV
Michele Dall'Agata

@ MicheleDall'Agata vẫn không có bất kỳ giải pháp tự nhiên cho thanh tiến trình đồ họa chất lượng tốt trong iOS nếu bạn muốn thực hiện tùy chỉnh hơn là tốt, nhưng tôi đề nghị sử dụng bcoz nguồn gốc của kích thước ứng dụng và hiệu suất ứng dụng
Harshil Kotecha

@HarshilKotecha Thực ra sau này tôi phát hiện ra rằng (ít nhất là đối với tvOS) trong IB có một kiểu dáng cho thiết bị hoạt động được gọi là "Large White". Cái đó có tỷ lệ gấp đôi cái bình thường, đó là những gì tôi nhắm đến. Các quy tắc quá nhỏ, có thể tốt cho một phòng giam.
Michele Dall'Agata,

45

Có thể thay đổi kích thước UIActivityIndicator.

CGAffineTransform transform = CGAffineTransformMakeScale(1.5f, 1.5f);
activityIndicator.transform = transform;

Kích thước gốc là 1,0f. Bây giờ bạn tăng và giảm kích thước cho phù hợp.


3
let transform = CGAffineTransformMakeScale(1.5, 1.5) activityIndicator.transform = transform
Rohit Funde

11

Swift3

 var activityIndicator = UIActivityIndicatorView()
    activityIndicator = UIActivityIndicatorView(activityIndicatorStyle: UIActivityIndicatorViewStyle.gray)
    activityIndicator.frame = CGRect(x: 0, y: 0, width: 50, height: 50)
    let transform: CGAffineTransform = CGAffineTransform(scaleX: 1.5, y: 1.5)
    activityIndicator.transform = transform
    activityIndicator.center = self.view.center
    activityIndicator.startAnimating()
    self.view.addSubview(activityIndicator)

3

Đây là một tiện ích mở rộng sẽ hoạt động với Swift 3.0 và kiểm tra để ngăn chặn việc mở rộng quy mô 0 (hoặc bất kỳ giá trị nào bạn muốn cấm):

extension UIActivityIndicatorView {
    func scale(factor: CGFloat) {
        guard factor > 0.0 else { return }

        transform = CGAffineTransform(scaleX: factor, y: factor)
    }
}

Gọi nó như vậy để mở rộng thành 40 pts (2x):

activityIndicatorView.scale(factor: 2.0)


1

Điều tốt nhất bạn có thể làm là sử dụng whiteLargephong cách. let i = UIActivityIndicatorView(activityIndicatorStyle: UIActivityIndicatorViewStyle.whiteLarge).

Việc tăng kích thước của UIActivityIndicatorViewkhông làm thay đổi kích thước thích hợp của chỉ báo, như bạn có thể thấy trong các hình ảnh này.chỉ báo nhỏ chỉ báo "lớn"


-1

activityIndicator.transform = CGAffineTransform (scaleX: 1,75, y: 1,75);

Điều này đã giúp tôi thay đổi kích thước của chỉ báo.

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.