Я сделал это недавно.
Вам нужны два подкласса UIView: один внешний вид (рисует фон и управляет удалением пузыря) и один внутренний (рисует сам пузырь). Я назвал свои IMPBubbleView и IMPBubbleInternalView.
В IMPBubbleView он устанавливает себя равным размеру текущего UIWindow, а затем добавляет себя в качестве подпредставления окна. Вызывающий должен передать прямоугольник, на который должен указывать пузырь: определить, где он находится в окне, выполнив convertRect: toView: (метод в UIView) и передав IMPBubbleView.
IMPBubbleView создает объект IMPBubbleInternalView и добавляет его как подпредставление для себя.
Необходимо выяснить, есть ли место для рисования пузыря ниже или выше прямоугольника (чтобы пузырек не заканчивался за пределы экрана). Вы можете заставить пузырьковое представление отображать в нем переданный в UIView объект: это делает API наиболее многоразовым. Затем вы можете запросить размер этого представления. Немного простых математических расчетов и установите свойство bubbleOnTop для IMPBubbleInternalView.
Чтобы нарисовать сам пузырь, я портировал часть кода Мэтта Геммела (его можно найти по адресу http://mattgemmell.com/source), чтобы создать путь для контура пузыря. Затем я залил его градиентом следующих цветов:
CGFloat locations[5] = { 0.0, 0.5, 0.65, 0.65, 1.0 };
CGFloat components[20] = { 0.0, 0.0, 0.0, 1.0, // Start color
58.0/255, 58.0/255, 58.0/255, 1.0,
58.0/255, 58.0/255, 58.0/255, 1.0,
91.0/255, 91.0/255, 91.0/255, 1.0,
144.0/255, 144.0/255, 144.0/255, 1.0 }; // End color
Когда вы отображаете IMPBubbleInternalView, вы можете использовать Core Animation, чтобы заставить его плавно увеличиваться, или слегка увеличивать, а затем уменьшать, или что-то еще.
Наконец, вам нужно обрабатывать касания в IMPBubbleView (который рисует фон). Нажмите здесь, чтобы убрать пузырь. Переопределите touchesEnded: withEvent: и используйте метод locationInView: для сенсорного объекта (чтобы убедиться, что вы обрабатываете касание, находящееся за пределами пузыря).
Думаю, это все. У меня было много вещей для добавления кнопок (я эмулировал меню копирования / вставки).
person
Amorya
schedule
27.12.2009