0

私のアプリケーションでは、サーバーからデータを受信して​​います。このデータを使用してテーブルビュー(MasterViewController)に入力し、このテーブルの項目の1つを選択すると、DetailViewControllerに詳細情報が表示されます。これらの情報は、アプリケーションを起動するたびに、またはユーザーが更新ボタンを押したときに読み込まれます。

サーバーからデータを受信して​​いる間、UIActivityIndi​​catorViewと「Loading...」というラベルを含むビューを表示したいのですが。これは、アプリケーションをポートレートモードで起動または更新したときに、問題なく機能します。しかし、横向きモードで同じことを試してみると、ビューのサイズが正しくありません。

ビューをロードするために使用しているコードは次のとおりです。

+ (SpinnerView *)loadSpinnerViewIntoView:(UIView *)superView {

    SpinnerView *spinnerView = [[SpinnerView alloc] initWithFrame:superView.bounds];

    if (!spinnerView)
        return nil;

    UIImageView *background = [[UIImageView alloc] initWithImage:[spinnerView addBackground]];
    background.alpha = 0.7;
    [spinnerView addSubview:background];

    UIActivityIndicatorView *indicator = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhiteLarge];
    indicator.autoresizingMask = UIViewAutoresizingFlexibleTopMargin | UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleBottomMargin | UIViewAutoresizingFlexibleLeftMargin;
    indicator.center = superView.center;
    [spinnerView addSubview:indicator];
    [indicator startAnimating];   

    CGSize maximumLabelSize = CGSizeMake(296, 9999);
    CGSize expectedLabelSize = [[NSString stringWithString:@"Loading..."] sizeWithFont:[UIFont boldSystemFontOfSize:25.0f] constrainedToSize:maximumLabelSize];

    UILabel *loadingLbl = [[UILabel alloc] initWithFrame:CGRectMake(0.0, 0.0, expectedLabelSize.width, expectedLabelSize.height)];
    loadingLbl.text = @"Loading...";
    loadingLbl.font = [UIFont boldSystemFontOfSize:25.0f];
    loadingLbl.autoresizingMask = UIViewAutoresizingFlexibleWidth;
    loadingLbl.backgroundColor = [UIColor clearColor];
    loadingLbl.textColor = [UIColor whiteColor];
    loadingLbl.center = CGPointMake(superView.center.x, superView.center.y - indicator.frame.size.height - 25);
    [spinnerView addSubview:loadingLbl];   

    [superView addSubview:spinnerView];

    CATransition *animation = [CATransition animation];
    [animation setType:kCATransitionFade];
    [[superView layer] addAnimation:animation forKey:@"layerAnimation"];

    return spinnerView;
}

これは、データの更新を開始したときにMasterViewControllerから呼び出されます。

spinner = [SpinnerView loadSpinnerViewIntoView:self.splitViewController.view];

SpinnerViewは、ロードされるという点でビューと同じ境界を取得します。横向きモードで正しく表示されない理由がよくわかりません。私の問題が理解でき、誰もが私を助けてくれることを願っています。

前もって感謝します

4

1 に答える 1

0

私はついにSinnerView呼び出しを次のように変更することでそれを行いました:

+ (SpinnerView *)loadSpinnerViewIntoView:(UIView *)superView withFrame:(CGRect)frame {

    SpinnerView *spinnerView = [[SpinnerView alloc] initWithFrame:frame];

    if (!spinnerView)
        return nil;

    .
    .
    .        

    return spinnerView;
}

次のように、viewDidLoadメソッドから関数を呼び出します。

[self performSelectorOnMainThread:@selector(checkLaunchOrientation:) withObject:nil waitUntilDone:NO];

関数は次のとおりです。

- (void)checkLaunchOrientation:(id)sender {

    UIInterfaceOrientation orientation = [UIApplication sharedApplication].statusBarOrientation;

    if (UIInterfaceOrientationIsLandscape(orientation))
        spinner = [SpinnerView loadSpinnerViewIntoView:self.splitViewController.view withFrame:CGRectMake(0.0, 0.0, [UIScreen mainScreen].bounds.size.height, [UIScreen mainScreen].bounds.size.width)];
    else
        spinner = [SpinnerView loadSpinnerViewIntoView:self.splitViewController.view withFrame:self.splitViewController.view.bounds];
}

これは一種の回避策ですが、私にとってはうまくいきます...

于 2013-01-30T10:24:07.163 に答える