CA平铺图层类的“缩放级别”不一致

时间:2015-02-23 17:30:41

标签: ios objective-c catiledlayer

所以我使用CATiled层创建自己的平面图。我的平面图在4,4s,5,5s和6等旧设备上工作正常。但是,当我在6 plus上运行我的程序时,我的缩放级别算法已关闭。 以下为什么:当我调用draw rect方法时,我会根据设备获得不同的图块宽度。当我调用我的图像时,我按照 ZoomLevel_COL_ROW.image 的顺序调用它们。我的缩放级别是2的倍数。因此,每当你捏缩放时,我的ZoomLevel按顺序调用:2,4,8,16和32.我的问题是我无法弄清楚如何划分瓷砖宽度为512,以获得适当的缩放级别。所以在6plus上,当视图加载时我的初始图块宽度 85.53 。所以512 / 85.3让我6 - 这不是我的序列。 然而,在5s我得到了一个128的瓦片宽度。所以512/128让我4 - 这是我的序列的一部分,但跳过2级。所以我很难确定什么会每次捏缩放时都是一致的算术来获取所有缩放级别序列。回想一下,我的序列是2,4,8,16,32。希望我很清楚,每个人都明白。谢谢!

- (void)drawRect:(CGRect)rect
{



//    NSLog(@"drawrect %@", NSStringFromCGRect(rect));
    zoomLevel = (512 / (CGRectGetWidth(rect)));

    int size = 512;
    int zoom = 1;

    while (size > rect.size.width) {
        size /= 2;
        zoom ++;
    }



    NSLog(@"Zoomlevel %d", zoomLevel);

    CGSize tileSize = rect.size;

    int firstCol = floorf(CGRectGetMinX(rect) / tileSize.width);
    int lastCol = floorf((CGRectGetMaxX(rect)-1) / tileSize.width);
    int firstRow = floorf(CGRectGetMinY(rect) / tileSize.height);
    int lastRow = floorf((CGRectGetMaxY(rect)-1) / tileSize.height);

    for (int row = firstRow; row <= lastRow; row++) {
        for (int col = firstCol; col <= lastCol; col++) {

            UIImage *tile = [self tileAtCol:col row:row];

            float width = tileSize.width;
            float height = tileSize.height;

            if (tile.size.width != tile.size.height) {
                // make sure that smaller tiles aren't stretched
                float widthRatio = tile.size.width / 512;
                float heightRatio = tile.size.height / 512;

                width *= widthRatio;
                height *= heightRatio;
            }

            CGRect tileRect = CGRectMake(tileSize.width * col,
                                         tileSize.height * row,
                                         width, height);

            tileRect = CGRectIntersection(self.bounds, tileRect);

            [tile drawInRect:tileRect];


        }
    }
}

1 个答案:

答案 0 :(得分:0)

弄清楚原因。它与比例因子有关!因为iPhone 6 plus具有不同的分辨率。看看下面的代码:

scaleFactor = [UIScreen mainScreen].scale;


float width = rect.size.width;



width *= scaleFactor;
zoomLevel = (512/ width);