Posso alterar o tamanho do UIActivityIndicator?


93

Seja qual for o tamanho que eu atribuo a ele durante a alocação, ele mostra apenas o tamanho fixo. É possível aumentá-lo?

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;

Respostas:


50

O tamanho é fixado pelo estilo. É um elemento de interface padronizado, então a API não gosta de mexer nele.

No entanto, você provavelmente poderia fazer uma transformação de escala nele. Não tenho certeza de como isso afetaria visualmente, no entanto.

Do ponto de vista do design da IU, geralmente é melhor deixar esses elementos padronizados comuns sozinhos. O usuário foi ensinado que certos elementos aparecem em um determinado tamanho e que significam coisas específicas. Alterar a aparência padrão altera a gramática da interface e confunde o usuário.


14
Isso é ótimo em certos contextos. No entanto, e se isso estiver em uma tela inicial, e tudo o que você vê é o logotipo e talvez esse pequeno botão giratório no meio da tela, parece um pouco bobo. Eu não posso acreditar que a Apple pensa que um tamanho único é até mesmo um conceito em elementos de interface do usuário.
Ben Leggiero

6
@BenLeggiero Você não está falando UIActivityIndicatorViewStyleWhiteLarge, mas sim do tamanho pequeno, certo? Porque eu acho que essa Largeversão tem um tamanho legal mesmo em uma tela vazia.
assuntos de significado

2
.whiteLargefaz isso! THX! Eu também configurei UIActivityIndicatorView(frame: CGRect(x: 0, y: 0, width: 100, height: 100))e activityIndicator.backgroundColor = UIColor(red: 255/255, green: 255/255, blue: 255/255, alpha: 0.38). Em 6 + / 7 + telas, o padrão é muito pequeno
rockhammer

1
Ficará embaçado se você fizer uma transformação de escala para aumentar o tamanho.
Gandalf458

164

O seguinte criará um indicador de atividade de 15 px de largura:

#import <QuartzCore/QuartzCore.h>

...

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

Embora eu entenda o sentimento da resposta da TechZen, não acho que ajustar o tamanho de um UIActivityIndicator por uma quantidade relativamente pequena é realmente uma violação dos idiomas de interface padronizados da Apple - se um indicador de atividade é 20px ou 15px não mudará a interpretação do usuário do que está acontecendo.


1
e os indicadores de atividade são muito pequenos no iPad com ter um no meio de um webView ...
hokkuk

4
Isso parece aumentar os pixels, portanto, não é aceitável para grandes quantidades, infelizmente.
prewett de

68

Swift 3.0 e Swift 4.0

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

3
Exatamente o que eu precisava. Esta deve ser a melhor resposta.
nocdib

Eu amo as soluções de uma linha para questões simples! Agora, o único problema é como anti-alias. Com o dobro do tamanho, parece um pouco áspero na Apple TV
Michele Dall'Agata

@ MicheleDall'Agata ainda não há nenhuma solução nativa para a barra de progresso de gráficos de boa qualidade no iOS se você quiser personalizar o que é bom, mas eu sugiro usar bcoz nativo de tamanho e desempenho do aplicativo
Harshil Kotecha

@HarshilKotecha Na verdade eu descobri depois que (pelo menos para tvOS) no IB existe um estilo para o equipamento de atividade chamado "Large White". Aquele tem o dobro das proporções do normal, que é o que almejei. Os regulares são muito pequenos, bons talvez para uma única célula.
Michele Dall'Agata

45

É possível redimensionar UIActivityIndicator.

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

O tamanho original é 1.0f. Agora você aumenta e reduz o tamanho de acordo.


3
let transform = CGAffineTransformMakeScale(1.5, 1.5) activityIndicator.transform = transform
Rohit Funde de

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

Aqui está uma extensão que funcionaria com o Swift 3.0 e verificações para evitar o escalonamento 0 (ou qualquer valor que você deseja proibir):

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

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

Chame assim para escalar para 40 pontos (2x):

activityIndicatorView.scale(factor: 2.0)


1

O melhor que você pode fazer é usar o whiteLargeestilo. let i = UIActivityIndicatorView(activityIndicatorStyle: UIActivityIndicatorViewStyle.whiteLarge).

Aumentar o tamanho de UIActivityIndicatorViewnão altera o tamanho do indicador adequado, como você pode ver nessas fotos.pequeno indicador indicador "grande"


-1

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

Isso me funcionou para transformar o tamanho do indicador.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.