是否可以在UIKit或CoreGraphics框架中更改坐标系的原点?我附上了一张照片来解释我的意思:
谢谢!
答案 0 :(得分:1)
设置视图transform
时,它有两个效果:
drawRect:
。从你的评论中听起来你想要#1而不是#2。以下是一些没有#2的#1的方法:
根本不要设置视图的transform
。相反,将变换应用于drawRect:
中的图形上下文,如下所示:
CGAffineTransform transform = ...
CGContextConcatCTM(UIGraphicsGetCurrentContext(), transform);
或者使用CGContextRotateCTM
等方法直接在图形上下文中构建变换。
创建一个单独的子视图(带有自己的UIView
子类)进行绘制,并在该子视图上设置变换。因此,您的视图层次结构将如下所示:
view
subview for drawing, with transform
other, untransformed subview #1
other, untransformed subview #2
other, untransformed subview #3
etc.
转到视图的基础CALayer
。设置视图的transform
属性时,它会将仿射变换转换为完整的3D(4x4)变换矩阵,并设置其图层的transform
属性。该图层具有另一个属性sublayerTransform
,仅适用于其子图层。我相信您可以将sublayerTransform
设置为其transform
的倒数,以有效地使transform
仅适用于您在其上下文中绘制的图形。这应该这样做:
view.transform = ...;
view.layer.sublayerTransform = CATransform3DInvert(view.layer.transform);