Вопрос о расширяемости Cocoa Touch Controls - PullRequest
1 голос
/ 12 июля 2009

Я новичок в программировании для iPhone, и мне интересно: насколько расширяемы различные элементы управления? Давайте возьмем кнопку в качестве примера:

  • Могу ли я изменить фоновый рисунок?
  • можно ли увеличить его, когда я нажимаю на него?
  • можно ли изменить шрифт?
  • можно ли использовать собственный шрифт?
  • Могу ли я использовать графические кнопки вместо текста?

Ответы [ 2 ]

3 голосов
/ 12 июля 2009

Да.

1,3,4 и 5 можно выполнить без кода, используя атрибуты кнопки в Интерфейсном Разработчике. Чтобы изменить шрифт, откройте панель шрифтов (Command-T) с выбранной кнопкой.

Для увеличения кнопки требуется добавить код, который выполняется при нажатии. Вы можете поместить несколько таких строк в ваш контроллер представления, и это должно помочь:

- (void)buttonClicked:(id)sender
{
   [UIView beginAnimations:nil context:nil];
   [UIView setAnimationDuration: 0.4];
   [sender setFrame:CGRectMake(--,--,--,--)]; //replace with slightly bigger button frame
   [UIView commitAnimations];
}
2 голосов
/ 12 июля 2009

В общем да на все ваши вопросы. Вы можете создавать подклассы различных классов UI *, которые составляют сенсорные элементы управления Cocoa, как и любые другие классы, и добавлять свои собственные пользовательские функции в соответствующие методы. Единственная сложность - выяснить, куда именно должен идти ваш код.

Давайте посмотрим на ваш пример UIButton и пройдемся по тому, что вы хотите с ним сделать.

Фоновое изображение

Класс UIButton уже имеет метод setBackgroundImage:forState:, который позволяет изменять UIImage, отображаемый кнопкой, когда он находится в одном из нескольких состояний, таких как «Нормальный», «Выделенный», «Отключенный» и т. Д.

Например, чтобы изменить изображение, кнопка отображается как обычный фон на "backgroundImage.png", который является файлом изображения в комплекте вашего приложения:

//Presuming you have some UIButton *button:
UIImage *bgImage = [UIImage imageNamed:@"backgroundImage.png"];
[button setBackgroundImage:bgImage forState:UIControlStateNormal];

Увеличивается

Вы можете изменить frame кнопки (унаследованное свойство от UIView), добавив метод для этого в файл .m контроллера view, который управляет кнопкой, а затем добавив этот метод в качестве действия для управляющего события на кнопка.

Допустим, вы хотите удвоить размер кнопки. В viewDidLoad: или в другом месте добавьте следующий код:

[button addTarget:self action:@selector(growButton) 
             forControlEvents:UIControlEventTouchDown];

Затем создайте метод growButton со следующим кодом:

- (void)growButton {
    CGRect currentFrame = button.frame;
    CGRect newFrame = CGRectMake(currentFrame.origin.x - currentFrame.size.width / 2,
                                 currentFrame.origin.y - currentFrame.size.height / 2,
                                 currentFrame.size.width * 2,
                                 currentFrame.size.height * 2);
    button.frame = newFrame;
}

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

Смена шрифта

Просто измените свойство font UIButton - установите для него новый экземпляр UIFont, как в этом примере:

button.font = [UIFont systemFontOfSize:16.0];

Изменяет шрифт кнопки на системный шрифт размером 16.

Пользовательский шрифт

Это довольно сложный вопрос, так как я уверен, что вы не сможете загрузить свои собственные файлы шрифтов, даже если вы включите их в свой пакет приложений. Однако вы можете изменить шрифт по умолчанию для элемента управления с помощью метода класса UIFont fontWithName:size:. Все названия шрифтов доступны через методы UIFont familyNames и fontNamesForFamilyName:.

Кнопка графики вместо текста

Это самый простой из пяти - просто не устанавливайте текст на кнопке, а вместо этого установите фоновое изображение для UIControlStateNormal (см. Выше).

...