Могу ли я изменить размер UIActivityIndicator?


95

Какой бы размер я ни присвоил ему при распределении, он показывает только фиксированный размер. Можно ли его увеличить?

Код:

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;

Ответы:


51

Размер фиксируется стилем. Это стандартизованный элемент интерфейса, поэтому API не любит возиться с ним.

Тем не менее, вы, вероятно, могли бы сделать на нем масштабирующее преобразование. Однако не уверен, как это повлияет на это визуально.

Просто с точки зрения дизайна пользовательского интерфейса обычно лучше оставить в покое эти общие стандартизированные элементы. Пользователя учили, что определенные элементы имеют определенный размер и означают определенные вещи. Изменение стандартного внешнего вида изменяет грамматику интерфейса и сбивает пользователя с толку.


14
В определенных контекстах это здорово. Однако что, если это экран-заставка, и все, что вы видите, - это логотип и, возможно, этот крохотный прядильщик в центре экрана, это выглядит немного глупо. Я не могу поверить, что Apple думает, что универсальность - это даже концепция элементов пользовательского интерфейса.
Ben Leggiero,

6
@BenLeggiero Вы ведь не про UIActivityIndicatorViewStyleWhiteLargeмаленький размер, а? Потому что я считаю, что эта Largeверсия имеет хороший размер даже на пустом экране.
смысл-имеет значение

2
.whiteLargeИмеет ли это! Спасибо! Я тоже ставил UIActivityIndicatorView(frame: CGRect(x: 0, y: 0, width: 100, height: 100))и activityIndicator.backgroundColor = UIColor(red: 255/255, green: 255/255, blue: 255/255, alpha: 0.38). На экранах 6 + / 7 + экран по умолчанию слишком крошечный
Rockhammer

1
Он будет выглядеть размытым, если вы выполните масштабирующее преобразование для увеличения размера.
Gandalf458,

164

Следующее создаст индикатор активности шириной 15 пикселей:

#import <QuartzCore/QuartzCore.h>

...

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

Хотя я понимаю настроение ответа TechZen, я не думаю, что изменение размера UIActivityIndicator на относительно небольшую величину на самом деле является нарушением стандартизированных идиом интерфейса Apple - независимо от того, составляет ли индикатор активности 20 пикселей или 15 пикселей, интерпретация пользователя не изменится. о том, что происходит.


1
а индикаторы активности слишком малы на iPad с одним из них в середине webView ...
hokkuk

4
Похоже, что это увеличивает размер пикселей, поэтому, к сожалению, это неприемлемо для больших объемов.
prewett

69

Swift 3.0 и Swift 4.0

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

3
Именно то, что мне нужно. Это должен быть главный ответ.
nocdib

Я люблю однострочные решения для простых вещей! Теперь вопрос только в том, как его сглаживать. В два раза больше на Apple TV он выглядит грубовато
Мишель Далл'Агата

@ MicheleDall'Agata по-прежнему нет собственного решения для индикатора прогресса графики хорошего качества в iOS, если вы хотите сделать индивидуальный, чем это хорошо, но я предлагаю использовать собственный bcoz размера приложения и производительности приложения
Харшил Котеча

@HarshilKotecha На самом деле позже я узнал, что (по крайней мере, для tvOS) в IB есть стиль для экипировки, который называется «Большой белый». Этот в два раза больше обычного, и я к этому стремился. Завсегдатаи маловаты, может быть, на одну ячейку годятся.
Мишель Далл'Агата

45

Можно изменить размер UIActivityIndicator.

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

Оригинальный размер 1.0f. Теперь вы соответственно увеличиваете и уменьшаете размер.


3
let transform = CGAffineTransformMakeScale(1.5, 1.5) activityIndicator.transform = transform
Рохит Фунде,

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

Вот расширение, которое будет работать со Swift 3.0 и проверяет, чтобы предотвратить масштабирование 0 (или любое другое значение, которое вы хотите запретить):

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

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

Назовите это так, чтобы увеличить до 40 пунктов (2x):

activityIndicatorView.scale(factor: 2.0)


1

Лучшее, что вы можете сделать, - это использовать whiteLargeстиль. let i = UIActivityIndicatorView(activityIndicatorStyle: UIActivityIndicatorViewStyle.whiteLarge).

Увеличение размера UIActivityIndicatorViewне меняет размер самого индикатора, как вы можете видеть на этих рисунках.маленький индикатор «большой» индикатор


Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.