101

无论我在分配时给它多少大小,它都只显示固定大小。有可能增加吗?

代码:

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;
4

10 回答 10

167

下面将创建一个 15px 宽的活动指示器:

#import <QuartzCore/QuartzCore.h>

...

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

虽然我理解 TechZen 回答的情绪,但我不认为将 UIActivityIndi​​cator 的大小调整相对较小的量确实违反了 Apple 的标准化界面习惯用法——无论活动指示器是 20px 还是 15px 都不会改变用户的解释发生了什么。

于 2012-03-01T20:18:53.413 回答
85

斯威夫特 3.0 和斯威夫特 4.0

self.activityIndi.transform = CGAffineTransform(scaleX: 3, y: 3)
于 2017-06-19T10:56:06.113 回答
52

大小由样式固定。它是一个标准化的界面元素,因此 API 不喜欢摆弄它。

但是,您可能可以对其进行缩放转换。但是,不确定这将如何影响它的视觉效果。

仅从 UI 设计的角度来看,通常最好不要管这些常见的标准化元素。用户已被告知某些元素以特定大小出现并且它们意味着特定的事物。改变标准外观会改变界面语法并使用户感到困惑。

于 2010-04-14T14:33:24.273 回答
45

可以调整 UIActivityIndi​​cator 的大小。

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

原始尺寸为 1.0f。现在你相应地增加和减少大小。

于 2015-10-27T08:39:59.790 回答
13

斯威夫特3

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)
于 2016-12-12T05:00:46.603 回答
4

这是一个适用于Swift 3.0的扩展& 检查以防止 0 缩放(或您想要禁止的任何值):

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

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

像这样调用它以扩展到 40 pts (2x):

activityIndicatorView.scale(factor: 2.0)
于 2017-03-21T20:34:13.543 回答
2

您还可以使用许多其他有用的“CGAffineTransform”技巧。有关更多详细信息,请参阅 Apple Developer Library 参考:

http://developer.apple.com/library/mac/#documentation/GraphicsImaging/Reference/CGAffineTransform/Reference/reference.html

祝你好运!

于 2013-05-22T15:50:31.483 回答
2

你能做的最好的就是使用这种whiteLarge风格。 let i = UIActivityIndicatorView(activityIndicatorStyle: UIActivityIndicatorViewStyle.whiteLarge).

正如您在这些图片中看到的那样,增加 的大小UIActivityIndicatorView不会改变指示器的大小。小指标

于 2018-06-02T19:31:28.603 回答
1

activityIndi​​cator.transform = CGAffineTransform(scaleX: 1.75, y: 1.75);

这对我改变指标的大小很有用。

于 2020-02-29T02:36:20.220 回答
0

是的,正如已经回答的那样,可以使用 transform 属性更改 UIActivityIndi​​catorView 的可见大小。为了允许设置/获取准确的指标大小,我添加了简单的扩展:

extension UIActivityIndicatorView {

var imageSize: CGSize {
    let imgView = subviews.first { $0 is UIImageView }
    return imgView?.bounds.size ?? .zero
}

var radius: CGFloat {
    get {
        imageSize.width * scale / 2.0
    }
    set {
        let w = imageSize.width
        scale = (w == 0.0) ? 0 : newValue * 2.0 / w
    }
}

var scale: CGFloat {
    get {
        // just return x scale component as this var has meaning only
        // if transform of scale type, and x and y scales are same)
        transform.a
    }
    set {
        transform = CGAffineTransform(scaleX: newValue, y: newValue);
    }
}

}

使用此扩展程序,您可以简单地编写例如

indicatorView.radius = 16.0

当您需要设置指示器与其他视图的精确间距时,它也很有用,因为 UIActivityIndi​​catorView 具有零帧。

于 2022-01-12T20:48:20.920 回答