renderInContext:不应用变换渲染CALayer吗?

时间:2012-06-22 21:25:21

标签: objective-c cocoa core-animation calayer

下面的代码如下:不确定我做错了什么,这里。它曾经在我从NIB文件渲染图层时工作。我尝试通过编程方式创建视图来更改它。现在它渲染图层但没有应用转换。

- (NSBitmapImageRep*)getCurrentFrame
{
  CGContextRef    bitmapContext = NULL;
  CGColorSpaceRef colorSpace;
  int bitmapByteCount;
  int bitmapBytesPerRow;

  int pixelsHigh = (int)[fixedWidthStringView bounds].size.height;
  int pixelsWide = (int)[fixedWidthStringView bounds].size.width;

  bitmapBytesPerRow   = (pixelsWide * 4);
  bitmapByteCount     = (bitmapBytesPerRow * pixelsHigh);

  colorSpace = CGColorSpaceCreateWithName(kCGColorSpaceGenericRGB);

  bitmapContext = CGBitmapContextCreate (NULL,
                                       pixelsWide,
                                       pixelsHigh,
                                       8,
                                       bitmapBytesPerRow,
                                       colorSpace,
                                       kCGImageAlphaPremultipliedLast);
  if (bitmapContext== NULL)
  {
        NSLog(@"Failed to create bitmapContext.");
        return nil;
  }

  CGColorSpaceRelease( colorSpace );


  [CATransaction setDisableActions:YES];
  fixedWidthStringView.layer.transform = CATransform3DScale(fixedWidthStringView.layer.transform, .5, 1, 1);
  [CATransaction commit];

  [fixedWidthStringView.layer renderInContext:bitmapContext];

  CGImageRef img = CGBitmapContextCreateImage(bitmapContext);
  NSBitmapImageRep *bitmap = [[NSBitmapImageRep alloc] initWithCGImage:img];
  CFRelease(img);

  return bitmap;

}

1 个答案:

答案 0 :(得分:0)

我自己修好了。事实证明,只要我将NSView添加到另一个NSView并渲染容器,就可以正常工作。