¿Puedo cambiar el tamaño de UIActivityIndicator?

93

Independientemente del tamaño que le dé durante la asignación, solo muestra un tamaño fijo. ¿Es posible aumentarlo?

Código:

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;
glotón
fuente
1
Compruebe esto stackoverflow.com/questions/8585715/…
jose920405

Respuestas:

50

El tamaño lo fija el estilo. Es un elemento de interfaz estandarizado, por lo que a la API no le gusta jugar con él.

Sin embargo, probablemente puedas hacer una transformación de escala en él. Sin embargo, no estoy seguro de cómo eso lo afectaría visualmente.

Solo desde la perspectiva del diseño de la interfaz de usuario, generalmente es mejor dejar estos elementos estandarizados comunes en paz. Se le ha enseñado al usuario que ciertos elementos aparecen en un tamaño determinado y que significan cosas específicas. Alterar la apariencia estándar altera la gramática de la interfaz y confunde al usuario.

TechZen
fuente
14
Eso es genial en ciertos contextos. Sin embargo, ¿qué pasa si esto está en una pantalla de bienvenida, y todo lo que ves es el logotipo y tal vez este pequeño y diminuto spinner en el medio de la pantalla, parece un poco tonto? No puedo creer que Apple piense que una talla única para todos es siquiera un concepto en los elementos de la interfaz de usuario.
Ben Leggiero
6
@BenLeggiero No estás hablando UIActivityIndicatorViewStyleWhiteLarge, sino del tamaño pequeño, ¿verdad? Porque creo que esta Largeversión tiene un buen tamaño incluso en una pantalla vacía.
significado importa
2
.whiteLarge¡lo hace! ¡Gracias! También configuro UIActivityIndicatorView(frame: CGRect(x: 0, y: 0, width: 100, height: 100))y activityIndicator.backgroundColor = UIColor(red: 255/255, green: 255/255, blue: 255/255, alpha: 0.38). En pantallas 6 + / 7 +, la predeterminada es demasiado pequeña
rockhammer
1
Se verá borroso si haces una transformación de escala para aumentar el tamaño.
Gandalf458
164

Lo siguiente creará un indicador de actividad de 15px de ancho:

#import <QuartzCore/QuartzCore.h>

...

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

Si bien entiendo el sentimiento de la respuesta de TechZen, no creo que ajustar el tamaño de un UIActivityIndicator en una cantidad relativamente pequeña sea realmente una violación de los modismos de la interfaz estandarizada de Apple: si un indicador de actividad es 20px o 15px no cambiará la interpretación de un usuario de lo que está pasando.

Andrew Vilcsak
fuente
1
y los indicadores de actividad son demasiado pequeñas en el IPAD con tener uno en el medio de un web View ...
hokkuk
4
Esto parece aumentar la escala de píxeles, por lo que no es aceptable para grandes cantidades, desafortunadamente.
prewett
69

Swift 3.0 y Swift 4.0

self.activityIndi.transform = CGAffineTransform(scaleX: 3, y: 3)
Harshil Kotecha
fuente
3
Exactamente lo que necesitaba. Esta debería ser la mejor respuesta.
nocdib
¡Me encantan las soluciones de una línea para asuntos simples! Ahora el único problema es cómo suavizarlo. Con el doble de tamaño, parece un poco tosco en Apple TV
Michele Dall'Agata
@ MicheleDall'Agata todavía no hay ninguna solución nativa para la barra de progreso de gráficos de buena calidad en iOS si desea personalizarlo, pero es bueno, pero sugiero usar bcoz nativo del tamaño de la aplicación y el rendimiento de la aplicación
Harshil Kotecha
@HarshilKotecha En realidad, descubrí más tarde que (al menos para tvOS) en el IB hay un estilo para el equipo de actividades que se llama "Large White". Ese tiene el doble de proporciones que el normal, que es lo que pretendía. Los habituales son demasiado pequeños, quizás buenos para una sola celda.
Michele Dall'Agata
45

Es posible cambiar el tamaño de UIActivityIndicator.

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

El tamaño del original es 1.0f. Ahora aumenta y reduce el tamaño en consecuencia.

vntstudy
fuente
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
fuente
3

Aquí hay una extensión que funcionaría con Swift 3.0 y verifica para evitar el escalado 0 (o cualquier valor que desee prohibir):

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

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

Llámelo así para escalar a 40 pts (2x):

activityIndicatorView.scale(factor: 2.0)
CodeBender
fuente
1

Lo mejor que puedes hacer es usar el whiteLargeestilo. let i = UIActivityIndicatorView(activityIndicatorStyle: UIActivityIndicatorViewStyle.whiteLarge).

Aumentar el tamaño de UIActivityIndicatorViewno cambia el tamaño del indicador propiamente dicho, como puede ver en estas imágenes.pequeño indicador indicador "grande"

wsgeorge
fuente
-1

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

Esto me funcionó para transformar el tamaño del indicador.

MD SHAHNAWAZUL HAQUE
fuente