[英]How to rotate CATextLayer and preserve it's size?
我有一个自定义视图,用于标记(在其上绘制线条和其他图形)。 视图控制器识别触摸和手势并将信息传递给视图,以便它可以正确地绘制自己。 每个图形都有一个标签( CATextLayer
),上面有一些图形信息(例如线长)。
我在视图控制器中添加了一个旋转手势识别器来旋转这个绘图视图。 我想旋转视图,但防止标签旋转(因此它们相对于超级视图保持 0.0 度)。 为此,我计算了新绘图视图相对于超级视图的角度,并将标签的角度属性设置为负值,以便我可以反向旋转它们。 例如,视图旋转 30 度,然后我将标签旋转 -30 度。
在负责绘制图形和设置标签的视图绘制方法中,每次需要重新绘制视图时,我都会为每个标签创建新的变换:
CGAffineTransform transform = CGAffineTransformIdentity;
transform = CGAffineTransformRotate(transform, self.angle); //self.angle - rotation angle in radians
transform = CGAffineTransformScale(transform, scale, scale); //scale label (need this for pinch gesture, works as expected)
label.transform = transform;
如果我将标签旋转 90 度,所有这些东西都会起作用。 如果度数不是 0、90、180 等,标签的框架会发生变化:缩小或放大,大角度甚至消失。 我明白,当你旋转矩形时,它的框架应该变大,因为它指向这里: 为什么旋转 UIImageView 大小会改变?
有没有办法防止CATextLayer
在旋转时改变其形状?
框架不是您在非矩形旋转后所期望的。
对于您的问题,我看到了三种可能的解决方案:
position
和bounds
分配适当的值来设置框架。CALayer
。我不确定前两个解决方案是否可行,我更喜欢第三个。
出现问题是因为我在设置转换后重置CATextLayer
的原点。 根据transform
属性文档:
当该属性的值不是恒等变换时,frame 属性中的值是未定义的,应该被忽略。
要更改图层的位置,请使用其position
属性。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.