2011-01-28 4 views
0

Я столкнулся с проблемой, которая сводит меня с ума ... Я знаю, что это должно быть простое исправление, но я не могу найти что-нибудь в Интернете (но может быть, вы смотрите не в то место).Происхождение UIView в подвале

У меня есть куча кнопок, которые я помещаю в представлении с помощью цикла:

//make the button smaller and position 
     CGRect buttonFrame = button.frame; 
     buttonFrame.size = CGSizeMake(41, 41); 
     buttonFrame.origin = CGPointMake(10+(43*i), 415); 
     button.frame = buttonFrame; 

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

buttonFrame.origin = CGPointMake(10+(43*i), 415); 

Я считаю, что это должно быть отработкой координат self.view и не новый подвид, который содержит кнопки. Нужен ли мне новый CGContext для супер-просмотра.

Я пытался что-то вроде:

buttonFrame.origin = [newView CGPointMake(10+(43*i), 415)]; 

Но это вызвало все виды ошибок.

Спасибо за ваше время!

ответ

1

Происхождение CGRect, назначенное в качестве рамки представления, представляет собой смещение, из которого будет отображаться представление из его супервизора.

Таким образом, если вы используете CGRect (100, 100, 200, 200), вид будет 100 пикселей справа от начала координат и на 100 пикселей на юг (также помните, что начало координат системы просмотра iOS находится в верхний левый угол) и имеет размер 200x200.

Ваша кнопка будет на 415 пикселей ниже локального источника (верхний левый угол) ее надзора, что может привести к ее отсутствию.

+0

Большое спасибо, это больно очевидно. Мне нужно больше спать. –

+0

Также рассмотрите возможность использования некоторых других удобных функций Core Graphics, таких как 'CGRectInset', который возвращает новый' CGRect', который меньше (или больше) на заданную сумму, чем тот, который вы предоставляете, и 'CGRectOffset', который возвращает новый «CGRect», который компенсирует заданную сумму из предоставленного «CGRect». Они не делают ничего принципиально иного, чем код, который вы показали, но часто помогают с ясностью (особенно полезно при низком уровне на кофеин). – jlehr

0

buttonFrame.origin = [newView CGPointMake (10+ (43 * i), 415)]; - эта строка кода не имеет смысла, потому что CGPointMake - это функция C, а не метод ObjectiveC, поэтому вы не можете публиковать ее, как сообщение для объекта. Если вы хотите добавить subview, вы должны использовать [newView addSuview: button]; и убедитесь, что вы добавили свой вид в другое представление.

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