0

スクロールビューを使用してviewcontrollersビューを表示しています。ユーザーがキャッシュされたビューの最後に到達した場合、私のメソッドは新しいビューをリロードします。私のNSLogsは、メソッドが終了したと言っていますが、ビューを表示するのにさらに5秒かかります。[scrollView addSubview:vc.view]は非常に遅いと思いますが、改善するものは何も見つかりませんでした。

メソッド全体が-(void)scrollViewDidEndDecelerating:(UIScrollView *)scrollViewで呼び出されます

 scrollView.userInteractionEnabled = NO;

    UIActivityIndicatorView *activityIndicator = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray];
    [activityIndicator setFrame:CGRectMake((320.f*index)+135.f, 151, 50, 50)];
    [activityIndicator setHidesWhenStopped:YES];
    [activityIndicator startAnimating];

    [scrollView addSubview:activityIndicator];

    MBBAppDelegate *delegate = (MBBAppDelegate *)[UIApplication sharedApplication].delegate;

    [delegate fetchDealsWithFilter:dealFilter fromIndex:index toIndex:(index+3) onSuccess:^(id object){

        MBBDealList *list = object;

        int i = 0;

        ProductDetailViewController *vc;

        for (MBBDeal *deal in [list deals]) {

            NSLog(@"start %i",i);
            int indexInArray = i;//[list.deals indexOfObject:deal];

            if (indexInArray+index >= numDeals) {
                return;
            }

            vc = [[ProductDetailViewController alloc] init];

            //fetch the deal and insert
            vc.numberOfDeals = numDeals;
            vc.dealIndex = index+1+indexInArray;
            vc.dealFilter = dealFilter;
            vc.deal = deal;

            vc.view.frame = CGRectMake(320.f*(index+indexInArray), 0.f, 320.f, 436.f);

            [scrollView addSubview:vc.view];

            [productDetailViewControllers insertObject:vc atIndex:(index+indexInArray)];

            i++;
        }
        [activityIndicator stopAnimating];
        scrollView.userInteractionEnabled = YES;

    }];

}

誰かが私の方法を改善する方法を知っていますか?

4

1 に答える 1

0

あなたの問題から私が理解できるのは、データフェッチプロセスを示すために使用したアクティビティインジケーターが正しく使用されていないということです。アクティビティインジケータが消えた後でも、データフェッチプロセスは引き続き機能しています。

そのために2つのことを行うことができます。performSelectorInBackgroundメソッドを使用してバックグラウンドでデータフェッチメソッドを呼び出すか、データフェッチメソッドを作成したアプリデリゲートにアクティビティインジケーターを配置します。

于 2012-06-20T08:03:12.723 に答える