Реализация растягивающихся диалоговых границ в iPhone SDK

StackOverflow https://stackoverflow.com/questions/2861016

Вопрос

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

Во всяком случае, я бы хотел сделать это, так что у меня могут быть диалоги любого размера без визуальных артефактов, которые поставляются с масштабированием границы искусства до маленьких, больших или дуратных непроверных дел. У меня есть несколько идей о том, как это делается, но не уверен, что лучше для iPhone. У меня есть несколько вопросов.

1) Должен ли я сделать объект «Содержащий вид», который в основном перегружает метод его лечения и рисует изображения, в которых они должны находиться в соответствующих масштабах, когда метод называется объектом «Содержащий вид», который просто содержит 8 UIIMageViews? Я подозреваю, что последний подход не будет работать, если мне нужно будет активно масштабировать полученный диалоговый класс, как в анимации.

1b) Если выплавка перегрузки - это путь, у кого-то есть какой-то код образца или ссылка на пример, который демонстрирует рисунок изображения непосредственно из NoteRect ()?

2) это, как правило, лучше создавать

а) изображение 3 х 3, где сегменты находятся в соответствующей степени 1x1 сетки изображения? Если это так, просто нарисовать из части этого изображения на мой целевой вид в лезении (если бы прежнее предположение верно, что я должен использовать NoteRect)?

б) части отдельно в 8 различных файлах?

Обновление: уточнить, идея состоит в том, чтобы предпринять любую индивидуальное пограничное искусство и иметь возможность растянуть 2, 4-й, 6 и 8-й ячейку (в сетке 3x3-ячейки), чтобы сформировать границу любого размера только с этими активами. Растяжение всего просто простое изображение приведет к искажению углов, поэтому я хотел бы растянуть те даже пронумерованные клетки по мере необходимости и прикреплению к углам, поэтому нет искажений. Я видел это сделано раньше, так что думал, что это может быть стандартным и иметь стандартное название к нему, кроме того, что я назвал это.

Во всяком случае, мне посоветовали, что добавление 8 UiimageViews к контейнеру не будет таким эффективным, как рисунок Uimages на лету в лезении, поэтому принял этот подход, используя CGContextDrawImage () после применения необходимых преобразований в контекст для перевода и масштабирования Y. Потому что Эта функция опирается из левого нижнего угла изображения, но на верхнем левом исходном UIVIEW изображение перевернуто без инвертирования оси Y. Я заметил, что предложение использовать функции Uiimage, такие как Drawatpoint работает, а также аналогично, но для инвертирования, поскольку Uiimage рисует в той же ориентации, что и UIViews. Я продолжу свою реализацию с первым и посмотрим, как он идет, но еще один вопрос.

Будет ли кто-то узнал, какой из этих подходов больше эффекта, быстрее и т. Д.?

Это было полезно?

Решение

Я не уверен, что следую, но вот мой лучший выстрел в ответ ...

Использование неполта: или добавление отдельных UiimageViews на родительский вид полностью зависит от вас. UiimageView дает вам немного инкапсулированных функциональных возможностей бесплатно, но в противном случае они такие же, как и выгляды.

Если вы хотите пойти на маршрут на лесте, вам просто нужно использовать Uiimage's Drawatcepte: метод. Делайте математику, где вы хотите, чтобы это было, и нарисуйте его. Вы можете рассчитать свои пункты на основе измерений родительского вида.

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

Надеюсь, что поможет немного?

Ваше здоровье

Другие советы

Если вы хотите границу в диалоговом окне, предполагая, что коробка представляет собой UIView (или подкласс), затем установите свойства границы слоя и позвольте системе нарисовать границу для вас.

#import <QuartzCore/QuartzCore.h> 
// ... 

view.layer.borderWidth = 2;
view.layer.borderColor = [UIColor whiteColor].CGColor; 
view.layer.cornerRadius = 0;  // 0=square corners, >0 for rounded
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top