活动指标与自定义图像

我正在加载一个UIWebView ,同时我不想显示一个空白页面 微调 活动指标旋转(siri活动指标)。 从我所了解的你不能改变图像,但我不能使用该图像,并创build一个animation,它旋转360°和循环? 还是会耗尽电池?

像这样?

 - (void)webViewDidStartLoad:(UIWebView *)webView { //set up animation [self.view addSubview:self.loadingImage]; //start animation } - (void)webViewDidFinishLoad:(UIWebView *)webView { //stop animation [self.loadingImage removeFromSuperview]; } 

我该怎么办?

提前致谢!

大多数这是在堆栈溢出中find。 让我总结一下:

创build一个UIImageView,它将作为一个活动指示器(内部情节提要场景,NIB,代码…无论你在哪里)。 我们称之为_activityIndicatorImage

加载你的图像: _activityIndicatorImage = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"activity_indicator"]];

你需要使用animation来旋转它。 这里是我使用的方法:

 + (void)rotateLayerInfinite:(CALayer *)layer { CABasicAnimation *rotation; rotation = [CABasicAnimation animationWithKeyPath:@"transform.rotation"]; rotation.fromValue = [NSNumber numberWithFloat:0]; rotation.toValue = [NSNumber numberWithFloat:(2 * M_PI)]; rotation.duration = 0.7f; // Speed rotation.repeatCount = HUGE_VALF; // Repeat forever. Can be a finite number. [layer removeAllAnimations]; [layer addAnimation:rotation forKey:@"Spin"]; } 

在我的layoutSubviews方法里,我开始旋转。 你可以把它放在你的webViewDidStartLoadwebViewDidFinishLoad如果这对你的情况更好:

 - (void)layoutSubviews { [super layoutSubviews]; // some other code [Utils rotateLayerInfinite:_activityIndicatorImage.layer]; } 

您始终可以使用[_activityIndicatorImage.layer removeAllAnimations];停止旋转[_activityIndicatorImage.layer removeAllAnimations];

你可以使用这个美丽的装载机灵感来自Tumblr应用程序
ASICH / AMTumblrHud

没有图像,你可以使用第三方库

对于目标C(也支持iOS 6) https://github.com/shebinkoshy/UIControllsRepo

为swift https://github.com/shebinkoshy/Activity-Indicator-Swift

优点

– >能够为微调器设置颜色

– >提供不同的尺寸,如小,中,大,非常大

– >可以设置标题(中心和底部)中等,大,非常大的尺寸

你可以设置一个图像到你的activityIndicator 。 我创build了一个将自定义图像添加到activityIndi​​cator的函数。 这是我创造的。

 public func showProgressView(view: UIView) -> UIImageView { let containerView = UIView() let progressView = UIView() var activityIndicatorImageView = UIImageView() if let statusImage = UIImage(named: Constants.ActivityIndicatorImageName1) { let activityImageView = UIImageView(image: statusImage) containerView.frame = view.frame containerView.backgroundColor = UIColor(hex: 0xffffff, alpha: 0.3) progressView.frame = CGRectMake(0, 0, 80, 80) progressView.center = CGPointMake(view.bounds.width / 2, view.bounds.height / 2) progressView.backgroundColor = UIColor(hex: 0x18bda3, alpha: 0.7) progressView.clipsToBounds = true progressView.layer.cornerRadius = 10 activityImageView.animationImages = [UIImage(named: Constants.ActivityIndicatorImageName1)!, UIImage(named: Constants.ActivityIndicatorImageName2)!, UIImage(named: Constants.ActivityIndicatorImageName3)!, UIImage(named: Constants.ActivityIndicatorImageName4)!, UIImage(named: Constants.ActivityIndicatorImageName5)!] activityImageView.animationDuration = 0.8; activityImageView.frame = CGRectMake(view.frame.size.width / 2 - statusImage.size.width / 2, view.frame.size.height / 2 - statusImage.size.height / 2, 40.0, 48.0) activityImageView.center = CGPointMake(progressView.bounds.width / 2, progressView.bounds.height / 2) dispatch_async(dispatch_get_main_queue()) { progressView.addSubview(activityImageView) containerView.addSubview(progressView) view.addSubview(containerView) activityIndicatorImageView = activityImageView } } return activityIndicatorImageView } 

你可以在代码中的任何地方调用这个方法。 只需调用startAnimating方法。 如果你想隐藏,只需调用stopAnimating方法。

它适用于SWITF 3和4

  var activityIndicator = UIActivityIndicatorView() var myView : UIView = UIView() func viewDidLoad(){ spinnerCreation() } func spinnerCreation(){ activityIndicator.activityIndicatorViewStyle = .whiteLarge let label = UILabel.init(frame: CGRect(x: 5, y: 60, width: 90, height: 20)) label.textColor = UIColor.white label.font = UIFont.boldSystemFont(ofSize: 14.0) label.textAlignment = NSTextAlignment.center label.text = "Please wait...." myView.frame = CGRect(x: (UIScreen.main.bounds.size.width - 100)/2, y: (UIScreen.main.bounds.size.height - 100)/2, width: 100, height: 100) myView.backgroundColor = UIColor.init(white: 0.0, alpha: 0.7) myView.layer.cornerRadius = 5 activityIndicator.center = CGPoint(x: myView.frame.size.width/2, y: myView.frame.size.height/2 - 10) myView.addSubview(activityIndicator) myView.addSubview(label) myView.isHidden = true self.window?.addSubview(myView) } @IBAction func activityIndicatorStart(_ sender: Any){ myView.isHidden = false self.activityIndicator.startAnimating() self.view.isUserInteractionEnabled = false self.view.bringSubview(toFront: myView) } @IBAction func activityIndicatorStop(_ sender: Any)() { myView.isHidden = true self.activityIndicator.stopAnimating() self.view.isUserInteractionEnabled = true }