Ios iPhone7上的宽颜色
问题是: 在使用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
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我试过你的想法,但似乎失败了。但我发现的方法很好,太好了。请将其作为答案发布!