2010-08-27 2 views
1

Итак, у меня есть очень простое приложение с видом в нем с помощью одной кнопки. У меня установлен контроллер только для пейзажа. Моя проблема в том, что после ее инициализации, а затем я нажимаю кнопку (которая имеет только оператор журнала), отличается от операторов журнала, которые у меня есть в конце моего init.Изменения в рамах iPad uiview сразу после initWithFrame

Я запускаю приложение в ландшафтном режиме на моем симуляторе (такие же результаты на устройстве). Как будто я назначил его, он просто переключается обратно. Я пробовал это заявление self.frame = CGRectMake(0, 0, 1024, 768); в моем методе buttonClicked, но это просто исказило и сдвинуло его.

- (id)initWithFrame:(CGRect)frame 
{ 
    if ((self = [super initWithFrame:frame])) 
    { 
    //BUTTONS 
    attributesButton = [UIButton buttonWithType:UIButtonTypeCustom]; 
    attributesButton.frame = CGRectMake(self.frame.size.width - buttonPadding - 35, self.frame.size.height/2 -22 -150, 35, 35); 
    [attributesButton setBackgroundImage:[UIImage imageNamed:@"loadIcon.png"] forState:UIControlStateNormal]; 
    [attributesButton addTarget:self action:@selector(attributesButtonClicked) 
       forControlEvents:UIControlEventTouchUpInside]; 
    [attributesButton setTitle:@"Attr" forState:UIControlStateNormal]; 
    [self addSubview:attributesButton]; 
    NSLog(@"Width: %f",self.frame.size.width); 
    NSLog(@"Height: %f",self.frame.size.height); 
    } 
    return self; 
} 

-(void)attributesButtonClicked 
{ 
    NSLog(@"Width: %f",self.frame.size.width); 
    NSLog(@"Height: %f",self.frame.size.height); 
} 

Так что это мой init. Извините, это выглядит так ужасно, что я не уверен, почему. Контроллер моего вида:

- (void)loadView 
{ 
    NSLog(@"myViewController: loadView"); 

    myView = [[myView alloc] initWithFrame:CGRectMake(0, 0, 1024, 768)]; 

    self.view = myView; 

} 

Теперь это часть, которая вызывает меня, отчеты журнала.

2010-08-27 15:16:55.242 tester[8703:40b] myViewController: loadView 
2010-08-27 15:16:55.262 tester[8703:40b] Width: 1024.000000 
2010-08-27 15:16:55.262 tester[8703:40b] Height: 768.000000 
CLICK MY BUTTON HERE 
2010-08-27 15:17:05.689 tester[8703:40b] Width: 748.000000 
2010-08-27 15:17:05.689 tester[8703:40b] Height: 1024.000000 

ответ

0

Если ваша точка зрения связана с одной из стандартных контроллеров отображения (UINavigationController, UITabBarController, ...), контроллер будет обновлять размер кадра во время выполнения, независимо от того, что указано в initWithFrame.

Это на самом деле хорошая вещь, потому что вам не придется беспокоиться о ориентации, панелей инструментов занимают пространство и т.д.

+0

Мое мнение не привязано к стандартным контроллерам. Just: @interface myViewController: UIViewController –

+0

Он не обязательно должен напрямую привязываться к стандартным контроллерам. Ваш «myViewController», вероятно, используется в UINavigationController или UITabBarController. Это даст вам то же поведение –

0

, что, вероятно, потому, что точка зрения в настоящее время autoresized родительским видом, когда вы добавляете его в качестве подтаблицы. Если вы не хотите, чтобы это произошло (хотя вы обычно делаете для полноэкранного просмотра) вы можете установить autoresizingMask к UIViewAutoresizingNone на:

- (id)initWithFrame:(CGRect)frame 
{ 
    if ((self = [super initWithFrame:frame])) 
    { 
     ... 
     self.autoresizingMask = UIViewAutoresizingNone; 
    } 
    return self; 
} 

EDIT: Хорошо, извините, я просто вспомнил, что на самом деле UIViewAutoresizingNone значение по умолчанию для autoresizingMask, поэтому установка этого значения во время инициализации фактически ничего не изменит. Но дело в том, что кадр изменяется надстройкой, когда вы добавляете свое представление в качестве подсмотра.

+0

Это не помогло. Спасибо за эту мысль. Почему он изменил бы размер для портрета, если бы я был в пейзаже? –

+0

Я не добавил subview, я просто установил self.view для myView. когда я попытался добавить addSubview, я ничего не получаю (потому что мой взгляд равен нулю) –

+0

да, но какой-то другой объект (делегат приложения, может быть?) должен принять это представление и добавить его в качестве подсмотра в какой-либо другой вид (возможно, основной окно приложения), иначе вы не сможете увидеть его вообще, не так ли? Вот когда кадр меняется. – filipe

1

Из того, что я испытал, кажется, что даже если вы находитесь в ландшафтном режиме, если вы используете маски автоматического изменения, вы должны использовать «портрет» кадр при инициализации вашего взгляда, используя initWithFrame:

Попытка:

myView = [[myView alloc] initWithFrame:CGRectMake(0, 0, 768, 1024)]; 
Смежные вопросы