Как я могу использовать CATransform3D на UIView, чтобы добавить определенный тип перспективы? - PullRequest
6 голосов
/ 18 июля 2010

Я уже некоторое время создаю приложения для iPhone, используя базовые преобразования (вращение, масштабирование и т. Д.), Но теперь я хотел бы сделать что-то более сложное.

Математика на самом деле не моя сильная сторона ... но мне было интересно, как мне добавить «перспективу» в UIView (см. Изображение ниже). Я быстро смоделировал скриншот, используя параметры перекоса в Photoshop .

Я осмотрел stackoverflow, чтобы найти решения для этого, я нашел Как применить перспективное преобразование к UIView? , который отлично работает - но это не совсем то, что мне нужно, потому что высота крайнего левого края больше правого края .

Кто-нибудь знает, как я могу сделать это CATransform3D, но без этих разных высот?

альтернативный текст http://img594.imageshack.us/img594/4354/perspectivel.png

1 Ответ

11 голосов
/ 18 июля 2010

Если вы просто хотите сделать перекос, вам не нужно 3D-преобразование.Достаточно аффинного преобразования.

-(void)drawRect:(CGRect)rect {
    CGContextRef ctx = UIGraphicsGetCurrentContext();
    CGAffineTransform transform = CGAffineTransformIdentity;
    transform.b = -0.1;
    transform.a = 0.9;
    CGContextConcatCTM(ctx,transform);
    // do drawing on the context
}

Это измененное копирование и вставка из проекта, который имеет аналогичное преобразование, но вам может потребоваться настроить параметры a и b.Это даст 1 к 9 повышение слева направо (0.1 / 0.9), а уплотнение слева направо до 90% (0.9).

...