iPhone: как делать снимки экрана программно при использовании преобразования 3D-слоя - PullRequest
2 голосов
/ 25 ноября 2010

Я пытаюсь программно сохранить изображение текущего вида в UIImage.текущий вид содержит фон и ряд UIImageViews, к которым применено трехмерное преобразование, например,

CATransform3D t = CATransform3DIdentity;
t = CATransform3DRotate(t, rotationX, 1.0, 0, 0);
t = CATransform3DRotate(t, rotationY, 0, 1.0, 0);
object.layer.transform = t;

В настоящее время я получаю снимок экрана текущего представления со следующим кодом:

UIGraphicsBeginImageContext(background.bounds.size);
[background.window.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage *viewImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

Однако трехмерные преобразования на объектах теряются, например, объекты отображаются на сохраненном изображении, как будто никакие трехмерные преобразования не применялись.Есть ли способ получить снимок экрана программным способом, который будет включать в себя 3d-преобразования?

UIGetScreenImage () не вариант, так как это частный API, и это приложение отправляется в магазин приложений.

1 Ответ

1 голос
/ 25 ноября 2010

Я не думаю, что это можно сделать в данный момент, так как renderInContext не отображает преобразования Core Animation, а UIGetScreenImage () не является публичным API, как вы хорошо заметили.Тот же вопрос уже задавался в StackOverflow:

1) Как мне создать / визуализировать UIImage из 3D-трансформированного UIImageView?

2) CALayer renderInContext

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

...