Динамически изменяющаяся позиция UIView - PullRequest
0 голосов
/ 24 мая 2010

Вот мои настройки. У меня есть viewcontroller, который я создаю и добавляю как подпредставление. Viewcontroller представляет некоторые параметры, которые пользователь может выбрать. Контроллер представления выдвигается в ответ на жест "длинного нажатия". В viewcontroller я добавил дочерний UIView, чтобы сгруппировать некоторые другие элементы управления вместе, чтобы я мог перемещать их по экрану как единое целое и, когда они отображаются, центрировать их в месте длительного нажатия. Вот код, который создает экземпляр контроллера представления, изменяет его местоположение и добавляет его как подпредставление:

UserOptions *opts = [[UserOptions alloc] initWithNibName:@"UserOptions" bundle:nil];
[opts recenterOptions:location];
[self.view addSubview:opts.view];

Этот фрагмент кода создает и передает viewcontroller, но вызов recenterOptions ничего не делает. Вот этот метод:

- (void) recenterOptions:(CGPoint)location {
    CGRect oldFrame = self.optionsView.frame;

    CGFloat newX = location.x; // + oldFrame.size.width / 2.0;
    CGFloat newY = location.y; // + oldFrame.size.height / 2.0;

    CGRect newFrame = CGRectMake(newX, newY, oldFrame.size.width, oldFrame.size.height);

    self.optionsView.frame = newFrame;
}

Обратите внимание, что self.optionsView - это дочерний UIView, который я добавил в перо viewcontroller.

Кто-нибудь знает, почему я не могу изменить местоположение UIView?

С уважением, Eric

Ответы [ 2 ]

0 голосов
/ 25 мая 2010

Просмотры загружаются лениво. До тех пор, пока вы не вызовете self.view, представление не загружается, а optionsView равно nil, поэтому self.optionsView.frame = newFrame ничего не делает.

0 голосов
/ 25 мая 2010

Пара вещей.Сначала попробуйте добавить представление в иерархию представлений перед вызовом -recenterOptions:

UserOptions *opts = [[UserOptions alloc] initWithNibName:@"UserOptions" 
                                                  bundle:nil];
[self.view addSubview:opts.view];
[opts recenterOptions:location];

Далее, просто установите центр представления вместо того, чтобы пытаться изменить его кадр:

- (void) recenterOptions:(CGPoint)location {
    [[self optionsView] setCenter:location];
}

Вы проверяете, что ваш optionsView действителен (не ноль)?

Я согласен с Робом, кстати.Вам нужно изменить название, чтобы оно соответствовало вашему вопросу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...