Kann ich die Größe von UIActivityIndicator ändern?


93

Unabhängig von der Größe, die ich bei der Zuweisung gebe, wird nur die feste Größe angezeigt. Ist es möglich, es zu erhöhen?

Code:

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;

Antworten:


50

Die Größe wird durch den Stil festgelegt. Es ist ein standardisiertes Schnittstellenelement, sodass die API nicht gerne damit herumfummelt.

Sie könnten jedoch wahrscheinlich eine Skalierungstransformation durchführen. Ich bin mir jedoch nicht sicher, wie sich dies visuell auswirken würde.

Nur aus Sicht des UI-Designs ist es normalerweise besser, diese gemeinsamen standardisierten Elemente in Ruhe zu lassen. Dem Benutzer wurde beigebracht, dass bestimmte Elemente in einer bestimmten Größe erscheinen und bestimmte Dinge bedeuten. Das Ändern des Standard-Erscheinungsbilds ändert die Grammatik der Benutzeroberfläche und verwirrt den Benutzer.


14
Das ist in bestimmten Kontexten großartig. Was ist jedoch, wenn sich dies auf einem Begrüßungsbildschirm befindet und Sie nur das Logo und möglicherweise diesen winzigen kleinen Spinner in der Mitte des Bildschirms sehen, sieht es ein bisschen albern aus. Ich kann nicht glauben, dass Apple glaubt, dass One-Size-Fits-All sogar ein Konzept für UI-Elemente ist.
Ben Leggiero

6
@ BenLeggiero Du redest nicht UIActivityIndicatorViewStyleWhiteLargeüber die geringe Größe, oder? Weil ich denke, dass diese LargeVersion auch auf einem leeren Bildschirm eine schöne Größe hat.
Bedeutungsangelegenheiten

2
.whiteLargemacht es! Vielen Dank! Ich setze auch UIActivityIndicatorView(frame: CGRect(x: 0, y: 0, width: 100, height: 100))und activityIndicator.backgroundColor = UIColor(red: 255/255, green: 255/255, blue: 255/255, alpha: 0.38). Auf 6 + / 7 + Bildschirmen ist der Standard einfach zu klein
Rockhammer

1
Es wird verschwommen aussehen, wenn Sie eine Skalierungstransformation durchführen, um die Größe zu erhöhen.
Gandalf458

164

Im Folgenden wird ein Aktivitätsindikator mit einer Breite von 15 Pixel erstellt:

#import <QuartzCore/QuartzCore.h>

...

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

Obwohl ich das Gefühl der Antwort von TechZen verstehe, denke ich nicht, dass das Anpassen der Größe eines UIActivityIndicator um einen relativ kleinen Betrag eine Verletzung der standardisierten Schnittstellen-Idiome von Apple darstellt - ob ein Aktivitätsindikator 20px oder 15px ist, ändert nichts an der Interpretation eines Benutzers von dem, was los ist.


1
und die Aktivitätsindikatoren sind auf dem iPad viel zu klein, da sich eine in der Mitte einer Webansicht befindet ...
hokkuk

4
Dies scheint die Pixel zu vergrößern, was für große Mengen leider nicht akzeptabel ist.
Prewett

68

Swift 3.0 & Swift 4.0

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

3
Genau das, was ich brauchte. Dies sollte die beste Antwort sein.
Nocdib

Ich liebe die einzeiligen Lösungen für einfache Angelegenheiten! Jetzt ist das einzige Problem, wie man es aliasisiert. Bei der doppelten Größe sieht es auf Apple TV etwas rau aus
Michele Dall'Agata

@ MicheleDall'Agata Es gibt immer noch keine native Lösung für die hochwertige Grafik-Fortschrittsanzeige in iOS, wenn Sie benutzerdefinierte Einstellungen vornehmen möchten, aber ich schlage vor, native Bcoz für App-Größe und App-Leistung zu verwenden
Harshil Kotecha

@ HarshilKotecha Eigentlich habe ich später herausgefunden, dass es (zumindest für tvOS) in der IB einen Stil für die Aktivitätsausrüstung gibt, der "Large White" heißt. Dieser hat doppelt so viele Proportionen wie der normale, was ich mir zum Ziel gesetzt habe. Die Stammgäste sind zu klein, vielleicht gut für eine einzelne Zelle.
Michele Dall'Agata

45

Es ist möglich, die Größe von UIActivityIndicator zu ändern.

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

Originalgröße ist 1.0f. Jetzt vergrößern und verkleinern Sie entsprechend.


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

Hier ist eine Erweiterung, die mit Swift 3.0 und Überprüfungen funktioniert , um eine 0-Skalierung zu verhindern (oder einen beliebigen Wert, den Sie verbieten möchten):

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

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

Nennen Sie es so, um auf 40 Punkte (2x) zu skalieren:

activityIndicatorView.scale(factor: 2.0)


1

Das Beste, was Sie tun können, ist den whiteLargeStil zu verwenden. let i = UIActivityIndicatorView(activityIndicatorStyle: UIActivityIndicatorViewStyle.whiteLarge).

Durch Erhöhen der Größe von UIActivityIndicatorViewwird die Größe des Indikators nicht geändert, wie Sie auf diesen Bildern sehen können.kleiner Indikator "große" Anzeige


-1

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

Dies hat mir bei der Transformation der Indikatorgröße geholfen.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.