Есть ли более короткий способ перемещения элемента пользовательского интерфейса в iOS? - PullRequest
1 голос
/ 06 января 2012

Я часто этим занимаюсь:

webView.frame = CGRectMake(webView.frame.origin.x, otherView.frame.origin.y + otherView.frame.size.height + 10, webView.frame.size.width, webView.frame.size.height);

Очевидно, большая часть этого кода повторяется. Я только перемещаю элемент вниз, но мне нужно создать новый CGRect, так как я не могу получить доступ к атрибутам напрямую.

Есть ли более простой способ перемещения элементов во время выполнения, который я пропускаю?

Ответы [ 4 ]

4 голосов
/ 06 января 2012

Не совсем другой способ, но более удобный, если вы спросите меня:

CGRect newRect = webView.frame;
newRect.origin.y = otherView.frame.size.height+10;
webView.frame = newRect;

Я считаю, что это также более читабельно. В этом конкретном примере это примерно на 40% меньше символов! : Р

2 голосов
/ 08 января 2013
view.frame = CGRectOffset(view.frame, 5, 10);
1 голос
/ 06 января 2012
0 голосов
/ 06 января 2012

@ wasabii имеет правильный ответ, поскольку сокращает объем кода, но следует рассмотреть еще один подход - создать категорию в UIView. Вот несколько документов о категориях: http://developer.apple.com/library/mac/#documentation/General/Conceptual/DevPedia-CocoaCore/Category.html

По существу, категория позволяет вам добавить функциональность к классу, который вы не контролируете (или даже тот, который вы контролируете).

Xcode 4.2 предоставляет шаблон для создания категории в новом диалоговом окне файла, поэтому используйте его, если можете.

В этом случае вы можете создать категорию в UIView с помощью метода

-(void)moveDownByIncrement:(float)increment

Затем реализуйте код движения так, как вам нравится (но на самом деле используйте метод @ wasabii).

Несколько слов о категориях:

  1. Они влияют на сам класс, поэтому при добавлении метода в категорию он становится доступным для всего приложения.
  2. Вы получите сообщение об ошибке (или предупреждение в зависимости от настроек вашего проекта) при попытке вызвать метод категории, если вы не импортировали заголовок категории (импортируйте его либо в классе, либо в предварительной обработке).
  3. Категории определяются с помощью пространства имен, которое может вызвать конфликт. Лучший способ избежать этого - использовать префикс любых добавляемых вами методов (и самого имени категории) с префиксом, специфичным для проекта. Многие сторонние библиотеки и проекты с открытым исходным кодом используют в NSData категорию, называемую - (NSString *) base64EncodedString, поэтому избавьте себя от головной боли и присвойте этому методу префикс в своей собственной категории.
  4. Установка свойств или иваров для категории в лучшем случае проблематична и заслуживает отдельного обсуждения. Если вы не знаете, как это сделать, просто не пытайтесь!
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...