Có thể thay đổi kích thước UIActivityIndicatorView bằng CGAffineTransform (scale), nhưng KHÔNG KHUYẾN KHÍCH vì làm mờ (blurry) indicator.
Cách làm (chỉ để tham khảo)
let indicator = UIActivityIndicatorView(style: .large)
indicator.color = .red
indicator.center = view.center
view.addSubview(indicator)
indicator.startAnimating()
// Scale 2.5x - LÀM MỜ
let transform = CGAffineTransform(scaleX: 2.5, y: 2.5)
indicator.transform = transform
Kết quả: Indicator bị mờ, không sắc nét.


Giải pháp đúng (Best Practice)
1. Dùng style built-in phù hợp
// iOS 13+
UIActivityIndicatorView(style: .large) // 46pt
UIActivityIndicatorView(style: .medium) // 36pt (mặc định)
UIActivityIndicatorView(style: .whiteLarge) // Large, màu trắng
2. Tự custom indicator (Crisp, không mờ)
Tạo class kế thừa UIView, vẽ spinner bằng CAShapeLayer + CABasicAnimation – vector, scale không bị mờ.
3. Dùng thư viện có indicator vector
- NVActivityIndicatorView: 30+ animation type, vector-based, tùy chỉnh size/màu dễ dàng.
- ProgressHUD: HUD + indicator vector.
- SwiftUI ProgressView (iOS 14+):
ProgressView().scaleEffect(2)– vector, không mờ.
Ví dụ NVActivityIndicatorView
let indicator = NVActivityIndicatorView(frame: CGRect(x: 0, y: 0, width: 80, height: 80),
type: .circleStrokeSpin, color: .systemBlue, padding: 0)
indicator.center = view.center
view.addSubview(indicator)
indicator.startAnimating()
Kết luận: Không dùng transform.scale trên UIActivityIndicatorView. Chọn style size phù hợp hoặc dùng custom vector indicator/thư viện.