Search
Write a publication
Pull to refresh

Comments 35

UFO landed and left these words here
Если это кнопка, то она должна нажиматься.
Конечно есть разница между кнопкой, поддерживающей состояния 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 все точно так же. Разве что 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

Sign up to leave a comment.

Articles