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;

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.


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.


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)

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.


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

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)


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"


-1

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

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

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.