Как стать автором
Обновить

Комментарии 35

кнопка не нажимается. ;)
НЛО прилетело и опубликовало эту надпись здесь
Если это кнопка, то она должна нажиматься.
Конечно есть разница между кнопкой, поддерживающей состояния pressed, disable, hover, focus,… и картинкой.

Статья несколько провокационная.
С одной стороны она показывает как быстро сделать 80% работы по кастомизации кнопки, с другой не показывает сколько еще работы придется сделать, чтобы поучить остальные 20%
Работы на самом деле не много на те 20%, легко инвертировать градиент задав его вектора в противоположную сторону. 10 строк кода дописать — максимум.
Вы прям хотите magic class в howto-статье. ;)
А чем плох растянутый битмап?
Всем хорош, кроме того6 что его надо вычитывать из бандла и растягивать. Это существенно дольше, ну и дополнительный мусор в бандле
Ну чтобы сделать правильную iPhone-style кнопку, боюсь drawRect разрастется очень сильно, что нивелирует весь выигрыш по сравнению с вычитыванием из бандла и растягиванием (которое вообще стоит копейки). Если на чем и сэкономите, то на самом битмапе — не надо будет его в памяти держать.
Есть еще очевидный плюс — это переносимость кода. Таскать битмапы из проекта в проект не сильно удобно. Хотя, как кому нравится.
Переносимость между чем и чем?
Между iPhone 3G и iPhone 4, например. Там, где можно обойтись одним градиентом, битмапа придется делать два.
Да ну что вы… Битмап, по крайней мере, 100500% сработает как надо ;)
[NSArray arrayWithObjects:
(id)[[UIColor colorWithRed:1.0f green:1.0f blue:1.0f alpha:0.99f] CGColor]
, (id)[[UIColor colorWithRed:1.0f green:1.0f blue:1.0f alpha:0.2f] CGColor]
, nil]

так точно можно делать? В смысле преобразовывать CGColor к id.
Да.
Вероятно вы не поняли контекста для чего это приведение.
Объясните человеку тогда, что именно из контекста он не понял и расскажите почему такое приведение работает :)
А вообще надо заворачивать такие вещи в NSValue. В документации к property colors написано, что принимает объект типа NSArray, состоящий из CGColorRef, поэтому в данном случае это корректно. Приведение к id нужно исключительно для скрытия ошибок компиляции :) Как устроено оно внутри, я могу только догадываться.
Хорошая статья. Но всеравно по-большей части прихоится работать с PNG-кнопочками.
Для данного стиля кнопок в iOS не используется эффект блика.
В добавок можно сказать что текст на аналогичных кнопках не синий а темно-серый.
ужас какой О_О как я рад что использую Qt.
аналогично, AS3
В Qt все точно так же. Разве что dealloc не надо писать.
Можно не писать dealloc, если если в декларации свойств писать @property (retain, autorelease).
Это «by design», так сказать.
тогда тем более :)
Нет атрибута autorelease у свойств в ObjC.
Сорри, заработался и обманул; действительно так. Можно конечно сделать [[[obj alloc] init] autorelease], но тогда аллоченый объект будет висеть до [pool drain];
На самом деле лучше все делать в -(void)dealloc;
Работал лет эдак 3 на Qt.
Сейчас вот уже 2-й год как под ифоны пишу.
И хотя подходы к построению интерфейса очень сильно отличаются — мне и там и там удобно.
Самое главное не лезть в чужой фреймворк со своим апи :)
Как вариант, чтобы не делать drawRect каждый раз, можно один раз сгенерировать картинку и использовать его как фон кнопки. А при вынесении этого в категорию даже и наследовать ничего не надо.
Объяснение, примеры и код можно найти тут:
www.mlsite.net/blog/?page_id=372
Хорошее решение.
А еще лучше заставить дизайнера сделать картинку вида:
(левая сторона) — (1-2 пикселя серединки) — (правая сторона)

А потом установить фон кнопки вот так:
UIImage *strechableOne = [img stretchableImageWithLeftCapWidth:5 topCapHeight:0];
[btn setBackgroundImage:strechableOne forState:...]

Сам текст пишем текстом. В итоге — при локализации меньше гемора (просто строками текст переводим). И кнопку можно делать разной ширины. (если точнее — то не уже исходной картинки)

Естественно всякие хитрые шрифты и эффекты таким способом рисуются очень сложно. Но для большинства задач — отличное решение.
Объясните мне кто-нибудь, зачем этот «блекс» на кнопках?
Данный эффект использовался Эпл в интерфейсе Аква. Он должен показывать блик который оставляют софт-боксы на глянцевых поверхностях.
Советую посмотреть в сторону Three20 (http://three20.info/) чтоб не строить велосипеды.

В ней есть универсальная реализация кнопок в том числе и вообще очень гибкий механизм стилей – TTStyle.
Иногда велосипеды полезно поизобретать, в целях образования.
Библиотека прикольная и автору явно зачет. Правда что бы в ней разобраться пришлось убить довольно много времени
следующие уроки мне показались будут интересны читателю, хоть и на английском. Они содержат и готовые проекты во всех случаях, и рассказ, как работать с «нажатием».

www.cimgf.com/2010/01/28/fun-with-uibuttons-and-core-animation-layers/
www.icodejunkie.com/?p=74
undefinedvalue.com/2010/02/27/shiny-iphone-buttons-without-photoshop

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации