3

ELCimagepicker(https://github.com/Fingertips/ELCImagePickerController)をプロジェクトに追加しましたが、これは完全に機能し、ユーザーはスライドショー用に複数の画像を選択できます。ただし、[保存]をクリックすると、追加された写真の数によっては、長い遅延が発生する可能性があります。

ユーザーが[保存]をクリックしたときにUIActivityIndi​​catorを追加しようとしましたが、表示されるモーダルビューが原因で問題が発生しました。ELCimagepickerが提示するアクティビティ(ELCImagePickerController)からメソッドを呼び出すことができます。これは、イメージピッカーの提示を処理するアクティビティによってアクションが実行されます。ただし、ビューに追加しようとすると、モーダルがアクティビティインジケーターの上にあるため、表示されません。

私はbringSubviewToFrontを使用してみましたが、[[self parentViewController] addSubView]を使用してimagepickerメソッドファイルにコードを直接追加しようとしましたが、うまくいきませんでした。

私が試した最新のコードは次のとおりです:(インジケーターは.hファイルでUIActivityIndi​​cator*インジケーターとして宣言されています)

 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の更新はすべてメインスレッドで行われます。したがって、を使用してUI更新を行うメソッドを実行することをお勧めします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 に答える