3

我已将 ELCimagepicker (https://github.com/Fingertips/ELCImagePickerController) 添加到我的项目中,它运行良好,允许用户为幻灯片选择多个图像。但是,当您单击“保存”时,可能会有很长的延迟,具体取决于添加的照片数量。

当用户单击“保存”时,我一直在尝试添加 UIActivityIndi​​cator,但由于呈现的模式视图而遇到问题。我可以从 ELCimagepicker 呈现的活动 (ELCImagePickerController) 中调用一个方法,这将由处理图像选取器呈现的活动执行。但是每当我尝试添加到视图时,它都不会显示,因为模式位于活动指示器的顶部。

我尝试过使用bringSubviewToFront,我尝试使用[[self parentViewController] addSubView] 将代码直接添加到imagepicker 方法文件中,但没有运气。

这是我尝试过的最新代码:(指标在 .h 文件中声明为 UIActivityIndi​​cator *indicator)

 indicator = [[UIActivityIndicatorView alloc]initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray];
indicator.hidden=false;

[self.navigationController.view addSubview:self.indicator];
[self.navigationController.view bringSubviewToFront:self.indicator];

[indicator startAnimating];

if([delegate respondsToSelector:@selector(elcImagePickerController:showIndicator:)]) {
    [delegate performSelector:@selector(elcImagePickerController:showIndicator:) withObject:self withObject:@"test"];
}

有没有人在 ELCimagepicker 之上添加 UIActivityIndi​​cator 或由另一个类处理的另一个模态视图取得任何成功?

我已经尝试过 MBProgressHUD,但也无法正常工作 - 当我在 ELCimagepicker 类中使用它时它会显示出来,但在删除时崩溃:

bool _WebTryThreadLock(bool), 0x42368e0: Tried to obtain the web lock from a thread other than the main thread or the web thread. This may be a result of calling to UIKit from a secondary thread. Crashing now...

任何帮助都会很棒。

谢谢。

4

3 回答 3

4

我已经弄清楚你的问题了。你可以这样做如下..

-(void)selectedAssets:(NSArray*)_assets {

UIActivityIndicatorView * activityIndicator = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray];
UIViewController * topView = [self.viewControllers objectAtIndex:[self.viewControllers count]-1];
activityIndicator.center = CGPointMake(topView.view.frame.size.width/2, topView.view.frame.size.height/2);
[activityIndicator setHidden:NO];
[topView.view addSubview:activityIndicator];
[topView.view bringSubviewToFront:activityIndicator];
[activityIndicator startAnimating];

[self performSelector:@selector(doProcess:) withObject:_assets afterDelay:2.1];

}

- (void) doProcess:(NSArray *)_assets {

NSMutableArray *returnArray = [[[NSMutableArray alloc] init] autorelease];

for(ALAsset *asset in _assets) {

    NSMutableDictionary *workingDictionary = [[NSMutableDictionary alloc] init];
    [workingDictionary setObject:[asset valueForProperty:ALAssetPropertyType] forKey:@"UIImagePickerControllerMediaType"];
    [workingDictionary setObject:[UIImage imageWithCGImage:[[asset defaultRepresentation] fullScreenImage]] forKey:@"UIImagePickerControllerOriginalImage"];
    [workingDictionary setObject:[[asset valueForProperty:ALAssetPropertyURLs] valueForKey:[[[asset valueForProperty:ALAssetPropertyURLs] allKeys] objectAtIndex:0]] forKey:@"UIImagePickerControllerReferenceURL"];

    [returnArray addObject:workingDictionary];

    [workingDictionary release];    
}

[self popToRootViewControllerAnimated:NO];
[[self parentViewController] dismissModalViewControllerAnimated:YES];

if([delegate respondsToSelector:@selector(elcImagePickerController:didFinishPickingMediaWithInfo:)]) {
    [delegate performSelector:@selector(elcImagePickerController:didFinishPickingMediaWithInfo:) withObject:self withObject:[NSArray arrayWithArray:returnArray]];
}

}

让我知道这个答案是否对您有帮助...

谢谢, MinuMaster

于 2011-11-24T06:54:27.263 回答
1

看起来您正在后台线程上更新 UI。所有 UIKit 更新都将在主线程中完成。所以我建议您使用performSelectorOnMainThread:withObject:.

于 2011-05-28T09:52:12.703 回答
0

我解决了这样的问题

     activityIndicatorObject = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhiteLarge];

     // Set Center Position for ActivityIndicator

     activityIndicatorObject.center = CGPointMake(150, 250);
     activityIndicatorObject.backgroundColor=[UIColor grayColor];

     // Add ActivityIndicator to your view
     [self.view addSubview:activityIndicatorObject];

     activityIndicatorObject.hidesWhenStopped=NO;

     [activityIndicatorObject startAnimating];
于 2014-09-16T10:39:45.457 回答