2011-12-19 16 views
1

私は、UILabelとUIActivityIndi​​catorViewをローディングインジケータとしてtableviewにサブビューとして追加しています。私は、これらのアイテムがテーブルビューの目に見えるものの真ん中にあり、ユーザがスクロールすると中央に留まるようにしたいので、ユーザは常にアイテムを見るでしょう。それらを作成するために私のコードは次のとおりです。UITableViewの可視領域にUILabelとUIActivityIndi​​catorViewの中心を合わせる

if (!spinner) { 
     spinner = [[UIActivityIndicatorView alloc]  initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray]; 
     [spinner startAnimating]; 

     loadingLabel = [[UILabel alloc] initWithFrame:CGRectZero]; 
     loadingLabel.font = [UIFont systemFontOfSize:20]; 
     loadingLabel.textColor = [UIColor grayColor]; 
     loadingLabel.text = @"Loading..."; 
     [loadingLabel sizeToFit]; 

     static CGFloat bufferWidth = 8.0; 

     CGFloat totalWidth = spinner.frame.size.width + bufferWidth + loadingLabel.frame.size.width; 

     CGRect spinnerFrame = spinner.frame; 
     spinnerFrame.origin.x = (self.tableView.bounds.size.width - totalWidth)/2.0; 
     spinnerFrame.origin.y = (self.tableView.bounds.size.height - spinnerFrame.size.height)/2.0; 
     spinner.frame = spinnerFrame; 
     spinner.autoresizingMask = (UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleTopMargin | UIViewAutoresizingFlexibleBottomMargin); 
     [self.tableView addSubview:spinner]; 

     CGRect labelFrame = loadingLabel.frame; 
     labelFrame.origin.x = (self.tableView.bounds.size.width - totalWidth)/2.0 + spinnerFrame.size.width + bufferWidth; 
     labelFrame.origin.y = (self.tableView.bounds.size.height - labelFrame.size.height)/2.0; 
     loadingLabel.frame = labelFrame; 
     loadingLabel.autoresizingMask = (UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleTopMargin | UIViewAutoresizingFlexibleBottomMargin); 
     [self.tableView addSubview:loadingLabel]; 
    } 

は、どのように私はそれrecenterはテーブルビューをスクロールすることができますか?私は真ん中にスピナーを再配置するためにサイズを計算する方法を

EDIT

?どんなプロパティを設定しますか? (; UITableViewControllerはこの不可能、可能な場合)UITableViewDelegateがある(

  • テーブルビューにビューを追加し、-scrollViewDidScroll:デリゲートメソッドでそれを再配置

  • +0

    UIViewControllerまたはUITableViewControllerですか? – Emon

    +0

    これは、上記のコードが実行されているUITableViewControllerであり、テーブルビューはラベル/アクティビティインジケータが表示される場所です。 – charleyh

    答えて

    2
    1. テーブルビューのスーパーにビューを追加します。 UIScrollViewDelegateのサブプロトコル)

    EDIT

    ビューの中心を維持するため

    -(void)scrollViewDidScroll:(UIScrollView *)scrollView{ 
    
    CGSize adSize = [awView actualAdSize]; 
    
    CGRect newFrame = awView.frame; newFrame.origin.x = (self.view.bounds.size.width - adSize.width)/2; 
    
    newFrame.origin.y = (self.tableView.contentOffset.y - adSize.height/2) -21; 
    
    awView.frame = newFrame; 
    } 
    
    +0

    現在の可視領域の中心点を計算するには、どのように計算すればよいですか?私は、フレーム、境界、中心と他のすべてのことについてちょっと混乱しており、何か助けに感謝します。 – charleyh

    +0

    ありがとう! AdViewは何を表していますか?それは中心にすべき視点ですか? actualAdSizeメソッドはどうですか?その方法は何ですか?私はそうするために十分な評判を得るとすぐにあなたの投票をします。 – charleyh

    +0

    actualAdSizeを呼び出す必要があるときのサイズはどのくらいですか? – charleyh

    関連する問題