Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/google-sheets/3.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 CATILDELAYER&;视网膜屏幕_Ios_Core Graphics_Retina Display - Fatal编程技术网

Ios CATILDELAYER&;视网膜屏幕

Ios CATILDELAYER&;视网膜屏幕,ios,core-graphics,retina-display,Ios,Core Graphics,Retina Display,有没有人有什么诀窍可以提高视网膜显示器上CATiledLayer的性能 本帖: 这意味着模拟器存在问题,但我注意到实际设备的性能也很差。这是一个非常明显的问题,因为它会更快地在视网膜显示器上加载更大的瓷砖。我能做的唯一一件事就是以更高的细节重新处理平铺图像 我做了一个小把戏: CGFloat scale = CGContextGetCTM(context).a / self.contentScaleFactor; 在计算比例时,但这似乎不足以解决性能差的问题。在我的平铺视图中: -

有没有人有什么诀窍可以提高视网膜显示器上CATiledLayer的性能

本帖:

这意味着模拟器存在问题,但我注意到实际设备的性能也很差。这是一个非常明显的问题,因为它会更快地在视网膜显示器上加载更大的瓷砖。我能做的唯一一件事就是以更高的细节重新处理平铺图像

我做了一个小把戏:

    CGFloat scale = CGContextGetCTM(context).a / self.contentScaleFactor;
在计算比例时,但这似乎不足以解决性能差的问题。

在我的平铺视图中:

- (id)initWithImageName:(NSString *)name size:(CGSize)size
{

    if ([[UIScreen mainScreen] respondsToSelector:@selector(scale)] == YES && [[UIScreen mainScreen] scale] == 2.00) {

        size = CGSizeMake(size.width*2, size.height*2);

    }

    if ((self = [super initWithFrame:CGRectMake(0, 0, size.width, size.height)])) {

        CATiledLayer *tiledLayer = (CATiledLayer *)[self layer];

        tiledLayer.levelsOfDetail = 4;
        if ([[UIScreen mainScreen] respondsToSelector:@selector(scale)] == YES && [[UIScreen mainScreen] scale] == 2.00) {

            tiledLayer.tileSize = CGSizeMake(512, 512);
        }

    }

    return self;
}
这让我的iPad3和iPad2一样工作。如果您正在做其他事情,比如覆盖数据等,那么您可能需要进行更多的争论。实际上,这只是将内容的大小和平铺的大小增加了一倍,从而抵消了视网膜显示的效果

您可能还想更改“我的平铺视图”中视网膜的最大和最小ZoomSales:

- (id)initWithImageName:(NSString *)name size:(CGSize)size
{

    if ([[UIScreen mainScreen] respondsToSelector:@selector(scale)] == YES && [[UIScreen mainScreen] scale] == 2.00) {

        size = CGSizeMake(size.width*2, size.height*2);

    }

    if ((self = [super initWithFrame:CGRectMake(0, 0, size.width, size.height)])) {

        CATiledLayer *tiledLayer = (CATiledLayer *)[self layer];

        tiledLayer.levelsOfDetail = 4;
        if ([[UIScreen mainScreen] respondsToSelector:@selector(scale)] == YES && [[UIScreen mainScreen] scale] == 2.00) {

            tiledLayer.tileSize = CGSizeMake(512, 512);
        }

    }

    return self;
}
这让我的iPad3和iPad2一样工作。如果您正在做其他事情,比如覆盖数据等,那么您可能需要进行更多的争论。实际上,这只是将内容的大小和平铺的大小增加了一倍,从而抵消了视网膜显示的效果


您可能还想更改视网膜的最大和最小ZoomSales

以确认我在硬件上看到了相同的问题。CATiledLayer似乎在我的iPad2上比在iPad3上工作得更好。不确定这是否是由于我的代码中的错误或某些潜在问题造成的。重写
-(void)didMoveToWindow{[super didMoveToWindow];self.contentScaleFactor=1;}
。简而言之,CATiledLayer已经基于屏幕像素(而不是“点”)工作。再多讨论一下,确认我在硬件上看到了同样的问题。CATiledLayer似乎在我的iPad2上比在iPad3上工作得更好。不确定这是否是由于我的代码中的错误或某些潜在问题造成的。重写
-(void)didMoveToWindow{[super didMoveToWindow];self.contentScaleFactor=1;}
。简而言之,CATiledLayer已经基于屏幕像素(而不是“点”)工作。再讨论一下