有什么方法可以显示动画旋转轮,而主线程执行冗长的操作?动画由创建UIActivityIndicatorView的同一个线程处理,对吧?如果是这样,属于多个线程的视图是否可以位于同一视图层次结构中?
所有其他方法都失败了,我不介意将冗长的操作本身移动到后台线程中,但是当它运行时我必须以某种方式冻结UI.我不知道该怎么做.
编辑:第一代设备上的"冗长"约为2秒.
我找到了一篇很棒的文章如何在导航栏上的Bar Button中添加一个Activity Indicator.但我不能在我的情况下重复这一点.我在代码中添加了导航栏和UIBarButton(不是在nib中),但我找不到一个名为UINavigationButton将Activity Indicator放入其中的元素.
我希望UIBarButtonItem按钮可见:

而不是那样的:

有没有人有建议如何使这项工作?
从iOS 6开始就遇到了这个问题.我无法弄清楚是什么原因会导致这种行为发生变化.这曾经在5中完美地运作.现在活动指标不及时或根本没有出现.任何帮助将非常感激.
-(void)myMethod
{
UIView *currentTitleView = [[self navigationItem] titleView];
// Create an activity indicator and start it spinning in the nav bar
UIActivityIndicatorView *aiview = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhite];
[[self navigationItem] setTitleView:aiview];
[aiview startAnimating];
// Start of Block code
void (^block)(arg1, arg2) =
^(arg1, arg2)
{
block code;
[aiview stopAnimating];
[[self navigationItem] setTitleView:currentTitleView];
};
// End of Block code
}
Run Code Online (Sandbox Code Playgroud) 我已经把活动指标
spinner.center = CGPointMake( [UIScreen mainScreen].bounds.size.width/2,[UIScreen mainScreen].bounds.size.height/2);
[self.view addSubview:spinner];
Run Code Online (Sandbox Code Playgroud)
但是这没有在表视图中正确居中.因为表视图可以滚动.如何将微调器放在屏幕中央.
downloadImages是一个按钮,每当我按下它时,一个微调器应该开始滚动,异步请求应该ping谷歌(以确保有连接)并且在收到响应后,我开始同步下载图像.
不知怎的,微调器不会去,似乎请求是同步而不是异步.
- (IBAction)downloadImages:(id)sender {
NSString *ping=@"http://www.google.com/";
GlobalVars *globals = [GlobalVars sharedInstance];
[self startSpinner:@"Please Wait."];
NSURL *url = [[NSURL alloc] initWithString:ping];
NSURLRequest *request = [NSURLRequest requestWithURL:url cachePolicy:NSURLRequestReloadIgnoringCacheData timeoutInterval:5.0];
[NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *error) {
if (data) {
for(int i=globals.farmerList.count-1; i>=0;i--)
{
//Definitions
NSString * documentsDirectoryPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
//Get Image From URL
NSString *urlString = [NSString stringWithFormat:@"https://myurl.com/%@",[[globals.farmerList objectAtIndex:i] objectForKey:@"Image"]];
UIImage * imageFromURL = [self getImageFromURL:urlString];
//Save Image to Directory
[self saveImage:imageFromURL withFileName:[[globals.farmerList objectAtIndex:i] …Run Code Online (Sandbox Code Playgroud) 我有一个自定义单元格加载在我的集合视图的底部。它唯一的工作是显示活动指示器视图 - 这在应用程序进行新的工作调用时发生。
所以我将它添加到单元格中,如下所示:
BBLoaderCell *loaderCell = [collectionView dequeueReusableCellWithReuseIdentifier:@"LoaderCell" forIndexPath:indexPath];
UIActivityIndicatorView * activityIndicator = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhite];
activityIndicator.hidesWhenStopped = YES;
activityIndicator.hidden = NO;
activityIndicator.center = loaderCell.imageView.center;
activityIndicator.tag = 10;
[loaderCell.imageView addSubview:activityIndicator];
[activityIndicator startAnimating];
return loaderCell;
Run Code Online (Sandbox Code Playgroud)
这在我视图的最后一个单元格中显示了一个活动指示器 - 但它不旋转。有任何想法吗?
找到解决方案
根据评论 - 这是一个线程问题。我还采纳了将代码移动到单元格的自定义 nib 文件中的建议。
这是重构的代码:
BBLoaderCell *loaderCell = [collectionView dequeueReusableCellWithReuseIdentifier:@"LoaderCell" forIndexPath:indexPath];
loaderCell.backgroundColor = [UIColor clearColor];
if (self.loadingMore == NO){
dispatch_async(dispatch_get_main_queue(), ^{
activityIndicator.hidden = YES;
[loaderCell.spinner stopAnimating];
});
}
else if (self.loadingMore == YES){
dispatch_async(dispatch_get_main_queue(), ^{
activityIndicator.hidden = NO;
[loaderCell.spinner startAnimating]; …Run Code Online (Sandbox Code Playgroud) 我知道如何动画UIActivityIndicatorView我知道如何建立连接 NSURLConnection.sendSynchronousRequest
但我不知道如何动画UIActivityIndicatorView WHILE与之建立联系 NSURLConnection.sendSynchronousRequest
谢谢
我正在尝试使用swift制作活动指示器,但有一些我缺少的东西
以下是启动活动按钮按钮的代码:
Indicator = ActivityIndicator().StartActivityIndicator(ViewController());
Run Code Online (Sandbox Code Playgroud)
这是停止活动按钮的代码
ActivityIndicator().StopActivityIndicator(ViewController(),indicator: Indicator);
Run Code Online (Sandbox Code Playgroud)
和ACtivity指标类的代码是
class ActivityIndicator: NSObject {
var myActivityIndicator:UIActivityIndicatorView!
func StartActivityIndicator(obj:UIViewController) -> UIActivityIndicatorView
{
self.myActivityIndicator = UIActivityIndicatorView(frame:CGRectMake(100, 100, 100, 100)) as UIActivityIndicatorView;
self.myActivityIndicator.activityIndicatorViewStyle = UIActivityIndicatorViewStyle.Gray
self.myActivityIndicator.center = obj.view.center;
obj.view.addSubview(myActivityIndicator);
self.myActivityIndicator.startAnimating();
return self.myActivityIndicator;
}
func StopActivityIndicator(obj:UIViewController,indicator:UIActivityIndicatorView)-> Void
{
indicator.removeFromSuperview();
}
}
Run Code Online (Sandbox Code Playgroud)
谢谢问题解决了
在写代码的时候我知道我必须在函数中传递自己的时间,但当时我不知道什么类型是自我引用所以我不知道类型然后我知道类型然后我决定尝试接收不同类型(UIView,UIActivityIndicatorView,UIViewController)然后我发现它应该是UIViewController但我忘了它应该通过自我和我寻找什么传递函数调用,我想让我们尝试UIViewController它并没有给我错误所以我认为这是正确的,但是当它不起作用时,我认为我足够接近,所以最好向专家询问这个问题.正如我所料,问题在几分钟内就解决了
Swift 3版
class ActivityIndicator: NSObject {
var myActivityIndicator:UIActivityIndicatorView!
func StartActivityIndicator(obj:UIViewController) -> UIActivityIndicatorView
{
self.myActivityIndicator = UIActivityIndicatorView(frame:CGRect(x: 100, y: 100, width: 100, height: 100)) as UIActivityIndicatorView
self.myActivityIndicator.activityIndicatorViewStyle = UIActivityIndicatorViewStyle.gray
self.myActivityIndicator.center = obj.view.center;
obj.view.addSubview(myActivityIndicator); …Run Code Online (Sandbox Code Playgroud) 我试图设置UIActivityindicatorview使用的大小setframe.它可以设置位置,但不能设置控件的大小.还有其他方法吗?
这是相关的代码.
UIActivityIndicatorView* mySpinner = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhiteLarge];
mySpinner.frame=CGRectMake((375/2)-25,210 , 100, 100);
mySpinner.color=[UIColor blueColor];
mySpinner.center =self.view.center;
mySpinner.hidesWhenStopped = YES;
[self.view addSubview:mySpinner];
Run Code Online (Sandbox Code Playgroud) 如何在swift中添加UIActivityIndicatorView页脚UICollectionView?因为UITableView,它只是self.tableView.tableFootView = self.myActivityIndicatorView.这可能吗?如果是这样,怎么样?
ios ×6
iphone ×3
swift ×3
asynchronous ×1
center ×1
cocoa-touch ×1
footer ×1
function ×1
ios6 ×1
objective-c ×1
uitableview ×1
xcode ×1
xcode5 ×1