Добавление искажения с проекцией точки схода в CAlayer
Я хотел бы преобразовать UIView таким образом, чтобы добавить к нему перспективу (с двумя точками схода) (см. Ниже).
Причина, по которой я хочу сделать это с представлением, заключается в том, что я хочу, чтобы содержимое преобразованного представления было ячейками UITableView.
Я новичок в этом виде кодирования, но я предполагаю, что мне придется изменить CALayer, принадлежащий подпредставлению. Тем не менее, я считаю, что интересующее меня преобразование не может быть создано с помощью CATransform3D.
У кого-нибудь есть идеи, как подойти к этой проблеме?
1 ответ
Кажется, я нашел способ обойти / решить проблему:
Используя преобразования CATransform3D, можно аппроксимировать точки обзора, разделяя вид на две части (две независимые UITableViews). Им должен управлять UIViewController (не UITableViewController, предоставляемый кодом x), который реализует необходимые протоколы.
Затем в методе viewDidLayoutSubviews: используйте следующий код для преобразования двух табличных представлений.
- (void) viewDidLayoutSubviews {
CATransform3D rotationAndPerspectiveTransform = CATransform3DIdentity;
// left View
// vantage point
rotationAndPerspectiveTransform.m34 = 1.0 / -150.0;
// Z-rotation of 90°
rotationAndPerspectiveTransform = CATransform3DRotate(rotationAndPerspectiveTransform, 90.0 * M_PI/180.0, 0, 0,1);
// X-rotation of 25°
rotationAndPerspectiveTransform = CATransform3DRotate(rotationAndPerspectiveTransform, -25.0 * M_PI/180.0, 1, 0,0);
// left view
[self.view viewWithTag:1].layer.transform = rotationAndPerspectiveTransform;
//right view
rotationAndPerspectiveTransform = CATransform3DIdentity;
rotationAndPerspectiveTransform.m34 = 1.0 / -150;
// Z-rotation of 90°
rotationAndPerspectiveTransform = CATransform3DRotate(rotationAndPerspectiveTransform, 90.0 * M_PI / 180.0, 0, 0,1);
// X-rotation of 30°
rotationAndPerspectiveTransform = CATransform3DRotate(rotationAndPerspectiveTransform, 25.0 * M_PI / 180.0, 1, 0,0);
// right view
[self.view viewWithTag:2].layer.transform = rotationAndPerspectiveTransform;
}
После преобразования две таблицы могут быть сдвинуты так, чтобы они аккуратно совмещались. Единственное оставшееся задание - соединить прокрутку одного телевизора с другим. Я еще не понял этого.