在辅助CALayer上看不到图像

时间:2017-06-16 16:00:31

标签: ios xamarin xamarin.ios

我有这样的代码:

// 1.
UIGraphics.BeginImageContextWithOptions(contentSize, false, 0);
// 2.
//UIGraphics.BeginImageContext(contentSize);
using (var g = UIGraphics.GetCurrentContext()) {
      g.TranslateCTM(0, contentSize.Height);
      g.ScaleCTM(1, -1);
      DrawContent(g, contentSize);
}
img = UIGraphics.GetImageFromCurrentImageContext();
UIGraphics.EndImageContext();
// skip some stuff        
mylayer.Contents = img.CGImage;

如果我使用(1)变体,我看不到任何图画。如果我使用(2)变体,我会看到模糊的图像。 为了检查图像,我通过context.DrawImage和(1)变体看起来很清晰。 myLayer是创建的CALayer。 BeginImageContextWithOptions和BeginImageContext之间有什么区别,所以第一层没有绘制图像?

更新

事实证明,真正的设备中没有出现问题(我只有5秒)。但它发生在iPhone模拟器上。

2 个答案:

答案 0 :(得分:0)

来自Apple Developer Documentation

  

<强> UIGraphicsBeginImageContext

     

此功能相当于调用   UIGraphicsBeginImageContextWithOptions   将opaque参数设置为的函数   没有    比例因子为1.0。

换句话说,这些函数调用之间的差异是比例因子的值。

//scale factor is 1
UIGraphics.BeginImageContext(contentSize);
//scale factor is 0
UIGraphics.BeginImageContextWithOptions(contentSize, false, 0);

如果您明确地将0作为比例参数传递,则比例因子将设置为设备主屏幕的比例因子。该值的范围在1-3之间,具体取决于设备的屏幕分辨率。您可以通过UIScreen.MainScreen.Scale访问它。

答案 1 :(得分:0)

我已经解决了这个问题!这是因为模拟器的图像太大了。在调试模式下,我将它缩小,模拟器开始显示它!