Почему мы не можем напрямую изменить размер или происхождение рамы UIView?
Это может показаться очень глупым для людей, которые это знают, но я совершенно новичок в iOS.
Я хотел бы знать, почему мы не можем изменить начало или размер или могут быть x, y или ширина по высоте этих свойств кадра UIView?
frame - это структура CGRect, а начало и размер - снова структуры CGPoint и CGSize.
когда мы можем получить к ним доступ, почему мы не можем их изменить?
В CGRect нет ничего подобного, мы можем изменить его атрибуты, поэтому почему бы нам не сделать это для рамки или границ.
Ответы
Ответ 1
Я предполагаю, что вы имеете в виду, почему вы не можете сделать что-то вроде этого:
myView.frame.origin.x = 23.0;
Хороший вопрос, ничего глупого. Проблема в том, что кадр сохраняется как свойство представления, а не отдельные компоненты кадра (размер и происхождение, или даже глубже, ширина, длина, х и у).
Фрейм является основополагающим для представления, поэтому есть много действий, которые необходимо сделать для представления, если его фрейм изменен. Если вам нужно было напрямую войти в исходное положение и изменить его, то вы обойдете метод setFrame
, где все это волшебство, вероятно, произойдет.
При доступе к view.frame вам предоставляется CGRect с тем же значением, что и view.frame, но на самом деле это не кадр, поэтому любые изменения в нем не влияют на представление.
Вы можете сделать это пошагово:
CGRect frame = view.frame;
frame.origin.x = 23.0;
view.frame = frame;
Ответ 2
Ответ лежит в синтаксисе языка (слегка запутанный):
-
myView
- объект Objective-C.
- Итак,
myView.frame
- это метод доступа к свойствам, который отправляется.
- Он возвращает структуру C типа CGRect.
-
frame.origin.x = 1
изменяет возвращенную временную структуру, которая является локальной для вашего кода.
Ваше намерение состояло в том, чтобы сообщить объекту что-то, отправив ему сообщение. Но вместо этого вы попросили объект для данных, а затем изменили эти данные. Теперь объект никогда не будет.
Компилятор должен предупредить вас об этой ошибке.