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)
我正在尝试将透视变换应用于仅沿其框架绘制正方形、在其父视图中水平居中并且是其父视图宽度的 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)