«[[UIScreen mainScreen] bounds]» возвращает ноль? - PullRequest
1 голос
/ 13 октября 2010

Когда я пытаюсь получить границы основного экрана с помощью [[UIScreen mainScreen] bounds], он возвращает ноль.Я также пробовал с [[UIScreen applicationFrame] bounds], все еще возвращает ноль.

Странная часть;если я сделаю 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 объявлен в заголовочном файле, как переработанный и видимый.

Я использую Xcode 3 и iOS SDK 4.1.

Я уверен, что для этого есть очень простое решение, однако я все еще новичок в Objective-C итаким образом я не могу решить это.

Спасибо

Ответы [ 3 ]

17 голосов
/ 13 октября 2010

Метод NSStringFromCGRect значительно упрощает быстрый вход CGRect.См. документацию Apple для получения дополнительной информации, но вот фрагмент кода:

CGRect screenBounds = [[UIScreen mainScreen] bounds];
NSLog(@"%@", NSStringFromCGRect(screenBounds));
9 голосов
/ 13 октября 2010

bounds - это struct, а не объект.Вы не можете вывести его с помощью спецификатора формата %@.Аналогично, члены структуры являются числами с плавающей точкой, а не целыми числами.Если вы выводите их с %d, вы обязательно получите неправильные результаты.

1 голос
/ 13 октября 2010

Для дальнейшего пояснения, "% @" форматирует объекты NSObject, вызывая [obj description] для объекта и используя строку, возвращаемую из этого. Поэтому, прежде чем пытаться отформатировать строку с помощью% @, убедитесь, что вы имеете дело с NSObject, а не с каким-либо другим типом.

...