2012-12-26 26 views
0

我有UIScrollViewCATiledLayer(如Large Image Downsizing iOS sample code)一個大的圖像管理。我不得不以畫線和矩形在其上繪圖視圖(UIView與繪製方法overrided)。 我試圖找到一種方法來重繪只有當我爲了提高性能放大圖像上可見矩形。只畫出好的矩形

我發現setNeedsDisplayInRect()方法,我用這樣的:

CGRect visibleRect = CGRectApplyAffineTransform(scrollView.bounds, CGAffineTransformMakeScale(1.0/imageScale, 1.0/imageScale)); 
[self.drawingView setNeedsDisplayInRect:visibleRect]; 

但在我drawRect()方法,現在,我重新繪製的所有線條和矩形。我怎麼能知道我必須重繪其可視行?

回答

0

你需要這樣的事情,這取決於你如何繪製圖像

- (void)drawRect:(CGRect)rect { 
    CATiledLayer *tiledLayer = (CATiledLayer *)[self layer]; 
    CGSize _tileSize = tiledLayer.tileSize; 

    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++) { 
      CGRect tileRect = CGRectMake(_tileSize.width * col, _tileSize.height * row, _tileSize.width, _tileSize.height); 

      tileRect = CGRectIntersection(self.bounds, tileRect); 

      // do your drawing 
      } 
     } 
    } 
} 
0

您確定在何處線,然後中風他們使用nsbezierpath/cgpath,對不對?

也許,大部分時間將在撫摸算法,不determining度過的。只需設置路徑的短片地區drawRect's dirtyRect說法。那麼虛擬筆畫應該沒有花費。