Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/119.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios iPhone7上的宽颜色_Ios_Cgcontextref - Fatal编程技术网

Ios iPhone7上的宽颜色

Ios iPhone7上的宽颜色,ios,cgcontextref,Ios,Cgcontextref,问题是: 在使用iPhone7时 我从UIView获取CGContextRef,那么比特像素是64。因为my.a只能与bitsPerPixel为32的传统RGB颜色空间位图缓冲区一起使用 有人知道如何将颜色空间为宽颜色的CGContextRef转换为与iPhone6一样的传统CGContextRef。解决方案如下: #if __IPHONE_OS_VERSION_MAX_ALLOWED > __IPHONE_9_3 -(void) layerWillDraw:(CALayer *)laye

问题是:

在使用iPhone7时

我从
UIView
获取
CGContextRef
,那么比特像素是64。因为my.a只能与bitsPerPixel为32的传统RGB颜色空间位图缓冲区一起使用

有人知道如何将颜色空间为宽颜色的
CGContextRef
转换为与iPhone6一样的传统CGContextRef。

解决方案如下:

#if __IPHONE_OS_VERSION_MAX_ALLOWED > __IPHONE_9_3
-(void) layerWillDraw:(CALayer *)layer 
{
    if( [[[UIDevice currentDevice] systemVersion] floatValue] >= 10.0 )
    {
        NSString* format = layer.contentsFormat;
        if( ![format isEqualToString:kCAContentsFormatRGBA8Uint]  )
            layer.contentsFormat = kCAContentsFormatRGBA8Uint;
    }
}
#endif
将上面的代码添加到您将要绘制的视图中,那么从视图中获得的CGContextRef是传统的,就像在iPhone6上一样,解决方案如下:

#if __IPHONE_OS_VERSION_MAX_ALLOWED > __IPHONE_9_3
-(void) layerWillDraw:(CALayer *)layer 
{
    if( [[[UIDevice currentDevice] systemVersion] floatValue] >= 10.0 )
    {
        NSString* format = layer.contentsFormat;
        if( ![format isEqualToString:kCAContentsFormatRGBA8Uint]  )
            layer.contentsFormat = kCAContentsFormatRGBA8Uint;
    }
}
#endif

将上面的代码添加到您将要绘制的视图中,那么从视图中获得的CGContextRef是传统的,就像在iPhone6上一样,这只是一个想法。好的,所以宽颜色是一种特性(UIDisplayGamut)。因此,也许您可以使用自定义容器视图控制器,这样您就可以调用
setOverrideTraitCollection(\u:forChildViewController:)
并欺骗您的子视图控制器,使其相信它正在没有宽颜色的设备上运行。@matt非常感谢anwser,我将尝试一下。昨天,我找到了一种处理宽颜色的方法,将UIView的图层属性“contentsFormat”设置为kCAContentsFormatRGBA8Uint,然后从运行时获得的CGContextRef是32位SperpixelIf有效,您应该将其作为答案发布!这种宽颜色的东西肯定会引起一些混乱,所以你在这里的工作可能对其他人非常有用。(也请注意,我不知道我的想法是否有效!我需要你帮我试试。)@matt我试过你的想法,但似乎失败了。但我发现的方法很好,太好了。请将其作为答案发布!这只是一个想法。好的,所以宽颜色是一种特性(UIDisplayGamut)。因此,也许您可以使用自定义容器视图控制器,这样您就可以调用
setOverrideTraitCollection(\u:forChildViewController:)
并欺骗您的子视图控制器,使其相信它正在没有宽颜色的设备上运行。@matt非常感谢anwser,我将尝试一下。昨天,我找到了一种处理宽颜色的方法,将UIView的图层属性“contentsFormat”设置为kCAContentsFormatRGBA8Uint,然后从运行时获得的CGContextRef是32位SperpixelIf有效,您应该将其作为答案发布!这种宽颜色的东西肯定会引起一些混乱,所以你在这里的工作可能对其他人非常有用。(也请注意,我不知道我的想法是否有效!我需要你帮我试试。)@matt我试过你的想法,但似乎失败了。但我发现的方法很好,太好了。请将其作为答案发布!