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;

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.


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.


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)

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.


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

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)


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


1

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

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

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.