Czy mogę zmienić rozmiar wskaźnika UIActivityIndicator?

95

Niezależnie od rozmiaru, który mu nadam podczas alokacji, pokazuje tylko stały rozmiar. Czy można go zwiększyć?

Kod:

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;
rosomak
źródło
1
Sprawdź ten stackoverflow.com/questions/8585715/ ...
jose920405

Odpowiedzi:

51

Rozmiar jest ustalany przez styl. Jest to ustandaryzowany element interfejsu, więc API nie lubi się nim bawić.

Jednak prawdopodobnie mógłbyś na nim wykonać transformację skalującą. Nie jestem jednak pewien, jak to wpłynie na to wizualnie.

Tylko z perspektywy projektowania interfejsu użytkownika zwykle lepiej jest pozostawić te wspólne standardowe elementy w spokoju. Użytkownik został nauczony, że pewne elementy pojawiają się w określonym rozmiarze i mają określone znaczenie. Zmiana standardowego wyglądu zmienia gramatykę interfejsu i dezorientuje użytkownika.

TechZen
źródło
14
To świetnie w niektórych kontekstach. A co jeśli to jest na ekranie powitalnym, a jedyne, co widzisz, to logo i może ten mały, mały spinner na środku ekranu, wygląda trochę głupio. Nie mogę uwierzyć, że Apple uważa, że ​​jeden rozmiar dla wszystkich to nawet koncepcja elementów interfejsu użytkownika.
Ben Leggiero,
6
@BenLeggiero Nie mówisz o tym UIActivityIndicatorViewStyleWhiteLarge, ale zamiast tego o małym rozmiarze, prawda? Bo uważam, że ta Largewersja ma niezły rozmiar nawet na pustym ekranie.
znaczenie-ma znaczenie
2
.whiteLargeczy to! dzięki! Ustawiłem też UIActivityIndicatorView(frame: CGRect(x: 0, y: 0, width: 100, height: 100))i activityIndicator.backgroundColor = UIColor(red: 255/255, green: 255/255, blue: 255/255, alpha: 0.38). Na ekranach 6 + / 7 + domyślny jest po prostu zbyt mały
rockhammer
1
Będzie wyglądać na rozmazane, jeśli wykonasz transformację skalującą w celu zwiększenia rozmiaru.
Gandalf458
164

Poniższe elementy utworzą wskaźnik aktywności o szerokości 15 pikseli:

#import <QuartzCore/QuartzCore.h>

...

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

Chociaż rozumiem sentyment odpowiedzi TechZen, nie sądzę, aby zmiana rozmiaru wskaźnika UIActivityIndicator o stosunkowo niewielką wartość była naprawdę naruszeniem standardowych idiomów Apple - to, czy wskaźnik aktywności wynosi 20 pikseli, czy 15 pikseli, nie zmieni interpretacji użytkownika tego, co się dzieje.

Andrew Vilcsak
źródło
1
a wskaźniki aktywności są o wiele za małe na iPadzie z jednym w środku webView ...
hokkuk
4
Wydaje się, że zwiększa to liczbę pikseli, więc niestety jest to nie do przyjęcia w przypadku dużych ilości.
prewett
69

Swift 3.0 i Swift 4.0

self.activityIndi.transform = CGAffineTransform(scaleX: 3, y: 3)
Harshil Kotecha
źródło
3
Dokładnie to, czego potrzebowałem. To powinna być najlepsza odpowiedź.
nocdib
Uwielbiam jednoliniowe rozwiązania w prostych sprawach! Teraz jedynym problemem jest to, jak to wygładzić. Dwukrotnie większy wygląda nieco szorstko na Apple TV
Michele Dall'Agata
@ MicheleDall'Agata nadal nie ma żadnego natywnego rozwiązania dla paska postępu grafiki o dobrej jakości w iOS, jeśli chcesz zrobić niestandardowy, niż jest dobry, ale sugeruję użycie natywnego bcoz rozmiaru aplikacji i wydajności aplikacji
Harshil Kotecha
@HarshilKotecha Właściwie później dowiedziałem się, że (przynajmniej dla tvOS) w IB istnieje styl sprzętu sportowego, który nazywa się „Large White”. Ten ma dwukrotnie większe proporcje niż normalny, do czego dążyłem. Stali bywalcy są za mali, może dobre na jedną komórkę.
Michele Dall'Agata
45

Istnieje możliwość zmiany rozmiaru UIActivityIndicator.

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

Oryginalny rozmiar to 1,0f. Teraz odpowiednio zwiększasz i zmniejszasz rozmiar.

vntstudy
źródło
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)
Vimal Saifudin
źródło
3

Oto rozszerzenie, które działałoby ze Swift 3.0 i sprawdza, aby zapobiec skalowaniu 0 (lub jakiejkolwiek wartości, którą chcesz zabronić):

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

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

Nazwij to tak, aby skalować do 40 pkt (2x):

activityIndicatorView.scale(factor: 2.0)
CodeBender
źródło
1

Najlepsze, co możesz zrobić, to użyć whiteLargestylu. let i = UIActivityIndicatorView(activityIndicatorStyle: UIActivityIndicatorViewStyle.whiteLarge).

Zwiększenie rozmiaru UIActivityIndicatorViewnie zmienia rozmiaru właściwego wskaźnika, co widać na tych zdjęciach.mały wskaźnik „duży” wskaźnik

wsgeorge
źródło
1

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

To pomogło mi w przekształceniu rozmiaru wskaźnika.

MD SHAHNAWAZUL HAQUE
źródło