我想在我当前的
UIView
中画一个CGGraphicsContext
。我通过 UIView
绘制 renderInContext:
,但它的位置不正确(始终位于左上角)。
我有
UIView
的所有值,可用于绘制 UIView
。
CGRect frame;
CGRect bound;
CGPoint center;
CGAffineTransform transform;
我目前设置图层的位置和旋转如下:
CGContextTranslateCTM(context, frame.origin.x, frame.origin.y);
CGContextRotateCTM(context, (CGFloat) atan2(transform.b, transform.a));
但是由于旋转,位置不正确并且与原始位置不同。
怎样才能恢复原来的位置呢?坐标系在这期间没有改变,只是将
center.x
和 center.y
值转换为适合 CGContextTranslateCTM
的值。
编辑:
保存的值是正确的,保存正确的
bounds
,center
和transform
不是我的问题的根源,我的问题的根源是通过CGLayer
将这些值设置为可绘制的CGContextTranslateCTM
。
图形上下文的几何形状可以通过以下代码片段调整为
UIView
的几何形状:
// Center the context around the view's anchor point
CGContextTranslateCTM(context, [view center].x, [view center].y);
// Apply the view's transform about the anchor point
CGContextConcatCTM(context, [view transform]);
// Offset by the portion of the bounds left of and above the anchor point
CGContextTranslateCTM(context,
-[view bounds].size.width * [[view layer] anchorPoint].x,
-[view bounds].size.height * [[view layer] anchorPoint].y);
创建一个大小与 CGContext 大小匹配的新图层,将 view.layer 作为子图层添加到新创建的图层中,然后相应地定位 view.layer。
CGContextRef context = CGBitmapContextCreate(NULL,
1000.f,
1000.f,
16,
20480,
colorSpace,
4353);
CALayer *copiedLayer = [view.layer copy];
CALayer *parentLayer = [CALayer new];
parentLayer.bounds = CGRectMake(0.f,
0.f,
CGBitmapContextGetWidth(context),
CGBitmapContextGetHeight(context));
copiedLayer.frame = view.frame;
[parentLayer addSublayer:copiedLayer];
[parentLayer renderInContext:context];