CATransform3DRotate 之后的视图裁剪

View clipping after CATransform3DRotate

我正在尝试将透视变换应用于仅沿其框架绘制正方形、在其父视图中水平居中并且是其父视图宽度的 3/4 的视图(让我们称之为 subview) :

我正在使用这个片段:

var rotationAndPerspectiveTransform = CATransform3DIdentity
rotationAndPerspectiveTransform.m34 = CGFloat(-1.0/280.0)
rotationAndPerspectiveTransform = CATransform3DRotate(rotationAndPerspectiveTransform, 30.0 * CGFloat.pi / 180.0, 1.0, 0.0, 0.0)
subview.layer.transform = rotationAndPerspectiveTransform

哪个做了我需要的转换,但有一个奇怪的效果——矩形的右边部分是 "clipped":

是什么原因造成的?我怎样才能避免它?

谢谢!

啊,这是一个 good-old 边界与框架的问题。变形后框架变宽,不再适合边界。

因为我仍然希望它水平居中,所以这个片段起到了作用:

let transformedFrame  = segmentView.layer.frame
let transformedBounds = segmentView.layer.bounds
let correctedBoundsX  = (transformedFrame.width - transformedBounds.width) / 2

segmentView.layer.bounds = CGRect(x: correctedBoundsX, y: transformedBounds.origin.y, width: transformedBounds.width, height: transformedBounds.height)