2015-02-23 2 views
0

Таким образом, я использую слой CATiled для создания своего собственного плана этажа. Мой план этажа прекрасно работает на более старых устройствах, таких как 4, 4, 5, 5 и 6. Однако, когда я запускаю свою программу на 6 плюс, моя арифметика для уровня масштабирования отключена. Вот почему: Когда я вызываю метод draw draw, я получаю разную ширину плитки на основе устройства. Когда я вызываю свои изображения, я вызываю их в последовательности 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. Надеюсь, я поняла, и все понимают. Благодаря!Несогласованный «Уровень масштабирования» для класса слоя с покрытием из CA-плитки

- (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]; 


     } 
    } 
} 

ответ

0

Понятно почему. Это связано с масштабным фактором! Потому что iPhone 6 plus имеет разное разрешение. Ознакомьтесь с приведенным ниже кодом:

scaleFactor = [UIScreen mainScreen].scale; 


float width = rect.size.width; 



width *= scaleFactor; 
zoomLevel = (512/ width); 
Смежные вопросы