в моем предыдущем коде я изменил систему координат в drawRect моего представления так, чтобы у прямоугольника было 0,0 в центре, 0,1 в верхнем центре и 1,0 в центре правого края. То есть нормализованная декартова система.
{
// SCALE so that we range from TL(0, 0) - BR(2, -2)
CGContextScaleCTM (X, 0.5 * bitmapSize.width, -0.5 * bitmapSize.height);
// TRANSLATE so that we range from TL(-1, 1) - BR(1, -1)
// ie: a cartesian coordinate system, centred on (0, 0) with:
// x increasing to the right
// y increasing upwards
// x&y each ranging from -1 to 1
CGContextTranslateCTM(X, 1, -1);
T = CGContextGetCTM (X);
}
в этом поле я создаю колесо с 12 нарисованными пользовательскими кнопками вокруг него. Кнопки светятся до постепенного исчезновения при нажатии.
Теперь я переделываю код, поскольку анимация воспроизводилась слишком медленно
в событии Load моего вида я создаю объект wheel, который рисует колесо на свой собственный CALayer. затем он добавляется в качестве подслоя в слой представления.
(объект колеса в свою очередь создаст кнопки, каждая из которых будет рисовать на своем собственном слое CALayer, и эти слои будут добавлены в качестве подслоев к слою колес)
В любом случае, я бы очень хотел выполнить рисование колеса и кнопок, используя мою нормализованную декартову систему. Но я не совсем понимаю, как это реализовать.
Я мог бы изменить трансформацию видов. Но это меняет границу прямоугольника вида. Одним из решений было бы иметь представление в представлении, но я случайно обнаружил, что обрезка по круговой траектории и рисование по этой траектории будет существенно медленнее, чем рисование без клипа. Так что я не решаюсь сделать это. Я ищу оптимальную эффективность (пока не обращаюсь к GL, но пока - я к этому не готов - мне нужно сначала разобраться в этом, я думаю)
в качестве альтернативы я мог бы изменить преобразование слоя. но это 3D трансформация! У меня много проблем с тем, чтобы разобраться в логике этого. Айфон это 2D экран. На нем представлен 2D интерфейс. виды и слои я представляю себе как плоские прямоугольники, сидящие друг на друге. Это неправильно? Это 3-ье дело только для того, чтобы создавать эффектные сальто?
что если слой был настроен на растеризацию, и у него странное преобразование? Как он может растеризоваться, если не знает, в каком разрешении пикселей он работает? Что делать, если у нас есть 10 вложенных слоев каждый со странным преобразованием? А самое сокровенное нужно растеризовать? Идет ли он как-то по цепочке и выясняет, какие пиксели нужно наложить? Что, если базовый слой находится внутри вида внутри вида внутри вида, и эти виды имеют 2D-преобразования на них? Это действительно идет до тех пор, пока не достигнет пикселя?
Я хочу растеризовать свои кнопки - вот почему я спрашиваю. Это очень сложные объекты рисования. Это позволило бы сэкономить много ресурсов графического процессора, если бы они были представлены мертвыми и живыми, а затухание просто состояло бы из композиции x * dead plus (1-x) * live. так что на самом деле я хочу растровые изображения для обоих.
кто-то может убить мое замешательство?
большое спасибо,
Ohmu