2010-03-01 3 views
4

Итак, в Interface Builder у меня есть представление в супервизоре, которое содержит два объекта Image View. Я хотел бы переместить это представление с экрана, когда приложение запустится, чтобы его можно было анимировать, чтобы переместиться на место. Вид описывается как pictureFrame в файле .h для интерфейса, и у меня есть представление, сопоставленное с выходным изображением. Вот мой текущий viewDidLoad:iPhone dev - Установить положение вида в viewDidLoad

- (void)viewDidLoad { 
    [super viewDidLoad]; 

    CGRect theFrame = [self.pictureFrame frame]; 
    theFrame.origin.y = -290; 
} 

Но, похоже, что это не работает. Как это исправить?

+3

Не предполагайте, что -290 вне экрана. Это не будет навсегда. Вычислите это число из границ экрана. http://developer.apple.com/iphone/library/documentation/UIKit/Reference/UIScreen_Class/Reference/UIScreen.html#//apple_ref/occ/instp/UIScreen/bounds –

ответ

16

Вы забыли установить рамку своего вида по:

CGRect theFrame = [self.pictureFrame frame]; 
    theFrame.origin.y = -290; 

добавить это, и вы хорошо:

self.pictureFrame.frame = theFrame;

+0

У меня такая же проблема, за исключением того, что я используя View вместо ImageView. Я создал метод, который перемещает представление в экран, а другой - для его перемещения (так что я могу скрыть представление с анимацией отхода). Эти два действия отлично работают при назначении кнопкам, но они не работают при вызове метода viewDidLoad. Странно то, что если я добавлю NSLog после вызова и попрошу свойство view.frame.origin.y, возвращаемое им поплавок будет правильным (я имею в виду, что origin.y был обновлен, но представление все еще находится там Я положил его в файл .nib). Я использую XCode 4.6.3 – RoberRM

+0

Хорошо, я нашел ответ почти сразу. Оказывается, что для перемещения представления лучше делать это в 'viewDidAppear', чем в' viewDidLoad' (как это прекрасно объясняется в ответе @rob mayoff: [link] (http://stackoverflow.com/questions/9476227/ не может-обновление вида слой-кадр-в-viewdidload)). – RoberRM

1

Я, как правило, делаю такие вещи как один вкладыш. Мне легче запомнить, что происходит, когда я возвращаюсь и читаю его позже.

Я также предпочитаю #define my view смещения, чтобы сохранить магические числа из моего кода.

#define kPictureFrameHorizontalOffset -290 


- (void)viewDidLoad { 
    [super viewDidLoad]; 
    self.pictureFrame.frame = CGRectMake(self.pictureFrame.frame.origin.x + 0, 
             self.pictureFrame.frame.origin.y + kPictureFrameHorizontalOffset, 
             self.pictureFrame.frame.size.width + 0, 
             self.pictureFrame.frame.size.height + 0); 
} 

Предоставлено это немного более подробно, но оно хорошо работает для меня.

Смежные вопросы