Могу ли я изменить размер UIActivityIndicator?
Какой бы размер я ему не давал при распределении, он показывает только фиксированный размер. Можно ли его увеличить?
код:
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;
Ответы
Ответ 1
Размер фиксируется стилем. Это стандартизованный элемент интерфейса, поэтому API не любит возиться с ним.
Однако, возможно, вы могли бы сделать масштабирующее преобразование. Не уверен, как это повлияло бы на это визуально.
С точки зрения дизайна пользовательского интерфейса, обычно лучше оставить эти общие стандартизированные элементы в одиночку. Пользователей научили, что определенные элементы появляются в определенном размере и что они означают конкретные вещи. Изменение стандартного внешнего вида изменяет грамматику интерфейса и смущает пользователя.
Ответ 2
Следующее создаст индикатор активности 15px wide:
#import <QuartzCore/QuartzCore.h>
...
UIActivityIndicatorView *activityIndicator = [[[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray] autorelease];
activityIndicator.transform = CGAffineTransformMakeScale(0.75, 0.75);
[self addSubview:activityIndicator];
В то время как я понимаю мнение TechZen, я не думаю, что корректировка размера UIActivityIndicator относительно небольшой суммой действительно является нарушением стандартизованных идиом интерфейса Apple - будет ли индикатор активности 20px или 15px не изменяться пользовательская интерпретация того, что происходит.
Ответ 3
Можно изменить размер UIActivityIndicator.
CGAffineTransform transform = CGAffineTransformMakeScale(1.5f, 1.5f);
activityIndicator.transform = transform;
Размер оригинала - 1.0f. Теперь вы увеличиваете и уменьшаете размер соответственно.
Ответ 4
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)
Ответ 5
Также есть множество других полезных трюков "CGAffineTransform", с которыми вы можете играть. Для получения дополнительной информации см. Ссылку "Библиотека разработчиков Apple":
http://developer.apple.com/library/mac/#documentation/GraphicsImaging/Reference/CGAffineTransform/Reference/reference.html
Удачи!
Ответ 6
Вот расширение, которое будет работать с 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)
Ответ 7
Swift 3.0
self.activityIndi.transform = CGAffineTransform(scaleX: 3, y: 3)