Objective c 试图将UIActivityIndicatorView添加到视图中,但不起作用
我使用的是iOS Recipes PragProg书中的一个配方,下面是我使用的原始代码部分:Objective c 试图将UIActivityIndicatorView添加到视图中,但不起作用,objective-c,ios,Objective C,Ios,我使用的是iOS Recipes PragProg书中的一个配方,下面是我使用的原始代码部分: - (void)addActivityIndicatorView { activityIndicatorView = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhiteLarge]; activityIndicatorView.autores
- (void)addActivityIndicatorView {
activityIndicatorView = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhiteLarge];
activityIndicatorView.autoresizingMask = UIViewAutoresizingFlexibleTopMargin |
UIViewAutoresizingFlexibleRightMargin |
UIViewAutoresizingFlexibleBottomMargin |
UIViewAutoresizingFlexibleLeftMargin;
CGRect aiFrame = activityIndicatorView.frame;
CGFloat originX = (self.view.bounds.size.width - aiFrame.size.width) / 2;
CGFloat originY = (self.view.bounds.size.height - aiFrame.size.height) / 2;
aiFrame.origin.x = floorl(originX);
aiFrame.origin.y = floorl(originY);
activityIndicatorView.frame = aiFrame;
[self.view addSubview:activityIndicatorView];
}
我意识到我想要这个activityindicator代码用于通过web加载数据的其他控件上的多个ActivityIndicatorView,所以这是我的实现,以生成可重用代码,并且它不会像上面代码用于它所在的一个viewcontroller那样在控件上显示activityindicator视图。是的,对于使用它的每个控件,我都会单步执行此代码,并调用[activityIndicator startAnimating];对于传递到此函数的activityIndicator。我想问的是,我应该在代码的其他地方看什么
- (void)addActivityIndicatorView:(UIActivityIndicatorView *)acitivityIndicator toView:(UIView *)view {
acitivityIndicator = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhiteLarge];
acitivityIndicator.autoresizingMask = UIViewAutoresizingFlexibleTopMargin |
UIViewAutoresizingFlexibleRightMargin |
UIViewAutoresizingFlexibleBottomMargin |
UIViewAutoresizingFlexibleLeftMargin;
CGRect aiFrame = acitivityIndicator.frame;
CGFloat originX = (view.bounds.size.width - aiFrame.size.width) / 2;
CGFloat originY = (view.bounds.size.height - aiFrame.size.height) / 2;
aiFrame.origin.x = floorl(originX);
aiFrame.origin.y = floorl(originY);
acitivityIndicator.frame = aiFrame;
[view addSubview:acitivityIndicator];
}
按照以下方式编写您的方法:
- (void)addActivityIndicatorView:(UIActivityIndicatorView **)activityIndicator toView:(UIView *)view {
UIActivityIndicatorView * activeInd = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhiteLarge];
activeInd.autoresizingMask = UIViewAutoresizingFlexibleTopMargin |
UIViewAutoresizingFlexibleRightMargin |
UIViewAutoresizingFlexibleBottomMargin |
UIViewAutoresizingFlexibleLeftMargin;
CGRect aiFrame = activeInd.frame;
CGFloat originX = (view.bounds.size.width - aiFrame.size.width) / 2;
CGFloat originY = (view.bounds.size.height - aiFrame.size.height) / 2;
aiFrame.origin.x = floorl(originX);
aiFrame.origin.y = floorl(originY);
activeInd.frame = aiFrame;
*activityIndicator = activeInd;
[view addSubview:*activityIndicator];
}
如果要使用上述方法,请将对UIActivityIndicatorView*
的引用传递给该方法,例如:
-(void) viewDidLoad
{
[super viewDidLoad];
UIActivityIndicatorView * ai;
[self addActivityIndicatorView: &ai toView: self.view];
activityIndicator = ai;
}
现在,无论何时开始设置动画:
[activityIndicator startAnimating];
在主线程中,开始设置动画和停止设置动画之间的时间非常少,以至于活动指示器不会显示。您可以通过分离到新线程进行检查,在新线程中,您将开始设置动画并停止设置动画。您知道,方法不会修改传递给它的实际参数,相反,它制作参数的副本,并在副本上执行方法内部的任何操作。如果我们想修改实际参数,我们通过引用传递它们(通过传递指向参数的指针)。在您的例子中,您希望修改一个指针,这就是为什么您应该将引用传递给指针(指向指针的指针)的Zeus。我在C#中就知道这一点,因为你不能新建一个传递到方法中的对象,或者实际上让它指向另一个对象,只能修改它的内容,调用它的方法,等等,我假设这在Obj-C中也是一样的。