Puis-je changer la taille de UIActivityIndicator?

93

Quelle que soit la taille que je lui donne lors de l'allocation, elle affiche uniquement une taille fixe. Est-il possible de l'augmenter?

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;
carcajou
la source
1
Vérifiez ce stackoverflow.com/questions/8585715/…
jose920405

Réponses:

50

La taille est fixée par le style. C'est un élément d'interface standardisé, donc l'API n'aime pas jouer avec.

Cependant, vous pourriez probablement effectuer une transformation de mise à l'échelle dessus. Je ne sais pas comment cela l'affecterait visuellement, cependant.

Du point de vue de la conception de l'interface utilisateur, il est généralement préférable de laisser ces éléments standardisés communs seuls. L'utilisateur a appris que certains éléments apparaissent dans une certaine taille et qu'ils signifient des choses spécifiques. La modification de l'apparence standard modifie la grammaire de l'interface et déroute l'utilisateur.

TechZen
la source
14
C'est génial dans certains contextes. Cependant, que se passe-t-il si c'est dans un écran de démarrage et que tout ce que vous voyez est le logo et peut-être ce petit spinner ado au milieu de l'écran, cela a l'air un peu idiot. Je ne peux pas croire qu'Apple pense que la solution universelle est même un concept dans les éléments de l'interface utilisateur.
Ben Leggiero du
6
@BenLeggiero Vous ne parlez pas de UIActivityIndicatorViewStyleWhiteLarge, mais plutôt de petite taille, non? Parce que je pense que cette Largeversion a une belle taille même sur un écran vide.
sens-questions
2
.whiteLargefait-le! THX! J'ai également mis UIActivityIndicatorView(frame: CGRect(x: 0, y: 0, width: 100, height: 100))et activityIndicator.backgroundColor = UIColor(red: 255/255, green: 255/255, blue: 255/255, alpha: 0.38). Sur 6 + / 7 + écrans, celui par défaut est tout simplement trop petit
Rockhammer
1
Cela semblera flou si vous effectuez une transformation de mise à l'échelle pour augmenter la taille.
Gandalf458
164

Ce qui suit va créer un indicateur d'activité de 15 px de large:

#import <QuartzCore/QuartzCore.h>

...

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

Bien que je comprenne le sentiment de la réponse de TechZen, je ne pense pas que l'ajustement de la taille d'un UIActivityIndicator par une quantité relativement petite est vraiment une violation des idiomes d'interface standardisés d'Apple - si un indicateur d'activité est 20px ou 15px ne changera pas l'interprétation d'un utilisateur de ce qui se passe.

Andrew Vilcsak
la source
1
et les indicateurs d'activité sont beaucoup trop petits sur l'iPad avec un au milieu d'une webView ...
hokkuk
4
Cela semble augmenter les pixels, donc pas acceptable pour de grandes quantités, malheureusement.
prewett
69

Swift 3.0 et Swift 4.0

self.activityIndi.transform = CGAffineTransform(scaleX: 3, y: 3)
Harshil Kotecha
la source
3
Exactement ce dont j'avais besoin. Cela devrait être la meilleure réponse.
nocdib du
J'adore les solutions en une ligne pour les questions simples! Maintenant, le seul problème est de savoir comment l'anti-aliaser. À deux fois la taille, il semble un peu rugueux sur Apple TV
Michele Dall'Agata
@ MicheleDall'Agata il n'y a toujours pas de solution native pour la barre de progression graphique de bonne qualité dans iOS si vous voulez personnaliser que c'est bien mais je suggère d'utiliser bcoz natif de la taille de l'application et des performances de l'application
Harshil Kotecha
@HarshilKotecha En fait, j'ai découvert plus tard que (au moins pour tvOS) dans l'IB il y a un style pour l'équipement d'activité qui s'appelle "Large White". Celui-là a deux fois les proportions du normal, c'est ce que je voulais. Les habitués sont trop petits, bons peut-être pour une seule cellule.
Michele Dall'Agata
45

Il est possible de redimensionner UIActivityIndicator.

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

La taille originale est 1.0f. Maintenant, vous augmentez et réduisez la taille en conséquence.

vntstudy
la source
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
la source
3

Voici une extension qui fonctionnerait avec Swift 3.0 et vérifie pour empêcher la mise à l'échelle 0 (ou quelle que soit la valeur que vous souhaitez interdire):

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

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

Appelez-le comme ça pour passer à 40 pts (2x):

activityIndicatorView.scale(factor: 2.0)
CodeBender
la source
1

Le mieux que vous puissiez faire est d'utiliser le whiteLargestyle. let i = UIActivityIndicatorView(activityIndicatorStyle: UIActivityIndicatorViewStyle.whiteLarge).

L'augmentation de la taille de UIActivityIndicatorViewne change pas la taille de l'indicateur proprement dit, comme vous pouvez le voir sur ces images.petit indicateur indicateur "grand"

wsgeorge
la source
-1

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

Cela m'a fonctionné pour transformer la taille de l'indicateur.

MD SHAHNAWAZUL HAQUE
la source