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;
wolverine
fonte
1
Verifique este stackoverflow.com/questions/8585715/…
jose920405

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.

TechZen
fonte
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.

Andrew Vilcsak
fonte
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)
Harshil Kotecha
fonte
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.

vntstudy
fonte
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)
Vimal Saifudin
fonte
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)
CodeBender
fonte
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"

Wsgeorge
fonte
-1

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

Isso me funcionou para transformar o tamanho do indicador.

MD SHAHNAWAZUL HAQUE
fonte