iPad: QuartzCore: несколько форм - PullRequest
       4

iPad: QuartzCore: несколько форм

0 голосов
/ 23 декабря 2010

Я новичок в QuartzCore и не так легко привыкаю. Я хочу нарисовать некоторые базовые фигуры в виде и повернуть / увеличить каждую из них независимо.

Можете ли вы дать мне несколько указаний или идей, как это сделать? спасибо

1 Ответ

0 голосов
/ 23 декабря 2010

Фактические операции с кварцем не гарантируют, что они будут очень быстрыми - если вы хотите связать отдельные фигуры, которые вращаются / масштабируются по отдельности, вам лучше поместить каждую в отдельный вид и выполнить вращение и масштабирование, отрегулировав преобразование. имущество. Композитор в iOS работает, кэшируя изображение всех видов и корректируя преобразование, просто настраивая, как кэшированное изображение выводится на экран. Следовательно, пикселизация будет проблемой, если вы увеличите масштаб слишком сильно, но даже не вдаваясь в механизмы, такие как CATiledLayer для асинхронного и разного предоставления различных уровней детализации (как в Safari, где при увеличении отображается пиксельная версия представления, а затем переходит к полному разрешению, как только оно будет готово), вы можете просто сначала выбрать размеры в максимальном размере, а затем уменьшить их.

Не зная точно вашего уровня опыта, вы захотите объявить один или несколько пользовательских подклассов UIView, которые могут рисовать одну из ваших фигур. Затем вы захотите реализовать свой собственный -drawRect: с вызовами CoreGraphics внутри него.

Свойство transform в UIView принимает CGAffineTransform и может быть анимировано в смысле CoreAnimation.

Если бы один из ваших пользовательских UIViews был просто нарисовать диагональную линию от верхнего левого угла представления до нижнего правого (бесполезная вещь, вероятно, но для целей примера), вы могли бы иметь:

- (void)drawRect:(CGRect)rect
{
    CGContextRef context = UIGraphicsGetCurrentContext();

    CGContextSaveGState(context);

    // we're relative to the inside of the view, so...
    CGPoint points[2]; 
    points[0] = CGPointMake(0, 0); 
    points[1] = CGPointMake(self.bounds.size.width, self.bounds.size.height);

    CGContextSetGrayStrokeColor(context, 0.6, 0.6);
    CGContextSetLineWidth(context, 2.0);
    CGContextStrokeLineSegments(context, points, 2);

    CGContextRestoreGState(context);
}

Тогда вы могли бы сделать, например:

view.transform = CGAffineTransformMakeScale(0.5, 0.5);
...