1

を使用してメイン画面の境界を取得しようとすると[[UIScreen mainScreen] bounds]、nullが返されます。私も試してみましたが[[UIScreen applicationFrame] bounds]、それでもnullを返します。

奇妙な部分は; 私がそれを行うNSLog(@"%@", [UIScreen mainScreen]);と、それが可能であるとしても、それをどのように解析するかはわかりませんが、正しい境界を出力します。

関連するコードは次のとおりです。

-(void)loadView {
    [super loadView];
    CGRect pagingFrame = [[UIScreen mainScreen] bounds]; 
    NSLog(@"%@", [[UIScreen mainScreen] bounds]); //prints null for me
    NSLog(@"Width of original frame = %d", pagingFrame.size.width); //prints out 0
    pagingFrame.origin.x -= pagingXOrigin;
    pagingFrame.size.width += pagingWidthAdd;
    NSLog(@"Width of adjusted frame = %d", pagingFrame.size.width); //still prints out 0
    pagingScrollView = [[UIScrollView alloc] initWithFrame:pagingFrame];
    pagingScrollView.pagingEnabled = YES;
    pagingScrollView.backgroundColor = [UIColor blackColor];
    pagingScrollView.contentSize = CGSizeMake(pagingFrame.size.width * [self imageCount], pagingFrame.size.height);
    self.view = pagingScrollView;
    //Initialize sets
    recycled = [[NSMutableSet alloc] init];
    visible = [[NSMutableSet alloc] init];
    [self tilePages];
}

pagingScrollViewはヘッダーファイルで宣言されており、リサイクルされて表示されます。

Xcode3とiOSSDK4.1を使用しています。

これには非常に簡単な解決策があると確信していますが、私はまだObjective-Cの新人であるため、解決できません。

ありがとう

4

3 に答える 3

17

このNSStringFromCGRect方法により、CGRectのログ記録がはるかに簡単になります。詳細については、 Appleのドキュメントを参照してください。ただし、コードスニペットは次のとおりです。

CGRect screenBounds = [[UIScreen mainScreen] bounds];
NSLog(@"%@", NSStringFromCGRect(screenBounds));
于 2010-10-13T17:35:34.570 に答える
9

boundsstruct、オブジェクトではありません。%@フォーマット指定子で出力することはできません。同様に、構造体のメンバーは整数ではなく浮動小数点数です。それらをで出力すると%d、間違った結果が得られることになります。

于 2010-10-13T15:27:26.593 に答える
1

さらに少し説明すると、「%@」はオブジェクトに対して[obj description]を呼び出し、そこから返された文字列を使用してNSObjectをフォーマットします。したがって、%@を使用して文字列をフォーマットする前に、他のタイプではなく、実際にNSObjectを処理していることを確認してください。

于 2010-10-13T15:30:43.460 に答える