Bisakah saya mengubah ukuran UIActivityIndicator?


93

Berapa pun ukuran yang saya berikan padanya saat alokasi, itu hanya menunjukkan ukuran tetap. Apakah mungkin untuk meningkatkannya?

Kode:

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;

Jawaban:


50

Ukurannya ditentukan oleh gaya. Ini adalah elemen antarmuka standar sehingga API tidak suka mengutak-atiknya.

Namun, Anda mungkin bisa melakukan transformasi penskalaan padanya. Namun, tidak yakin bagaimana hal itu akan mempengaruhinya secara visual.

Hanya dari perspektif desain UI, biasanya lebih baik membiarkan elemen standar umum ini sendiri. Pengguna telah diajarkan bahwa elemen tertentu muncul dalam ukuran tertentu dan itu berarti hal-hal tertentu. Mengubah tampilan standar mengubah tata bahasa antarmuka dan membingungkan pengguna.


14
Itu bagus dalam konteks tertentu. Namun, bagaimana jika ini ada di layar splash, dan yang Anda lihat hanyalah logo dan mungkin pemintal kecil di tengah layar ini, terlihat agak konyol. Saya tidak percaya Apple menganggap satu ukuran cocok untuk semua bahkan merupakan konsep dalam elemen UI.
Ben Leggiero

6
@BenLeggiero Anda tidak berbicara tentang UIActivityIndicatorViewStyleWhiteLarge, tetapi tentang ukuran yang kecil, bukan? Karena menurut saya Largeversi ini memiliki ukuran yang bagus bahkan di layar yang kosong.
arti-penting

2
.whiteLargemelakukannya! Terima kasih! Saya juga mengatur UIActivityIndicatorView(frame: CGRect(x: 0, y: 0, width: 100, height: 100))dan activityIndicator.backgroundColor = UIColor(red: 255/255, green: 255/255, blue: 255/255, alpha: 0.38). Pada layar 6 + / 7 +, yang default terlalu kecil
rockhammer

1
Ini akan terlihat buram jika Anda melakukan transformasi penskalaan untuk meningkatkan ukuran.
Gandalf458

164

Berikut ini akan membuat indikator aktivitas dengan lebar 15px:

#import <QuartzCore/QuartzCore.h>

...

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

Meskipun saya memahami sentimen jawaban TechZen, saya tidak berpikir menyesuaikan ukuran UIActivityIndicator dengan jumlah yang relatif kecil sebenarnya merupakan pelanggaran idiom antarmuka standar Apple - apakah indikator aktivitas 20px atau 15px tidak akan mengubah interpretasi pengguna tentang apa yang terjadi.


1
dan indikator aktivitas terlalu kecil di iPad karena memiliki satu di tengah tampilan web ...
hokkuk

4
Ini sepertinya memperbesar piksel, jadi sayangnya tidak dapat diterima untuk jumlah besar.
prewett

69

Swift 3.0 & Swift 4.0.0 Memperbarui

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

3
Persis yang saya butuhkan. Ini harus menjadi jawaban teratas.
nocdib

Saya suka solusi satu baris untuk hal-hal sederhana! Sekarang satu-satunya masalah adalah bagaimana anti alias itu. Dengan ukuran dua kali lipat, ini terlihat agak kasar di Apple TV
Michele Dall'Agata

@ MicheleDall'Agata masih belum ada solusi asli untuk bilah kemajuan grafis berkualitas baik di iOS jika Anda ingin membuat kustom daripada yang baik tetapi saya sarankan untuk menggunakan bcoz asli dari ukuran aplikasi dan kinerja aplikasi
Harshil Kotecha

@HarshilKotecha Sebenarnya saya telah mengetahui kemudian bahwa (setidaknya untuk tvOS) di IB ada gaya untuk perlengkapan aktivitas yang disebut "Putih Besar". Yang itu memiliki proporsi dua kali lipat dari yang normal, itulah yang saya tuju. Pelanggan tetapnya terlalu kecil, mungkin bagus untuk satu sel.
Michele Dall'Agata

45

Dimungkinkan untuk mengubah ukuran UIActivityIndicator.

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

Ukuran aslinya adalah 1.0f. Sekarang Anda menambah dan mengurangi ukuran yang sesuai.


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

Berikut adalah ekstensi yang akan bekerja dengan Swift 3.0 & memeriksa untuk mencegah penskalaan 0 (atau nilai apa pun yang ingin Anda larang):

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

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

Sebut saja seperti itu untuk menskalakan menjadi 40 poin (2x):

activityIndicatorView.scale(factor: 2.0)


1

Hal terbaik yang dapat Anda lakukan adalah menggunakan whiteLargegaya tersebut. let i = UIActivityIndicatorView(activityIndicatorStyle: UIActivityIndicatorViewStyle.whiteLarge).

Menambah ukuran UIActivityIndicatorViewtidak mengubah ukuran indikator, seperti yang Anda lihat pada gambar berikut.indikator kecil indikator "besar"


-1

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

Ini berhasil saya untuk mengubah ukuran indikator.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.