2013-07-19 43 views
1

我試圖放大在屏幕上轉換的圖像。縮放圖像是緩慢的在iPad 4代,是否有更快的辦法?

,這裏是我的drawRect:

- (void)drawRect:(CGRect)rect 
{ 
    CGContextRef context = UIGraphicsGetCurrentContext(); 
    CGContextSaveGState(context); 
    CGContextSetShouldAntialias(context, NO); 
    CGContextScaleCTM (context, senderScale, senderScale); 
    [self.image drawAtPoint:CGPointMake(imgposx, imgposy)]; 
    CGContextRestoreGState(context); 
} 

senderScale爲1.0,移動圖像(imgposx/imgposy)非常流暢。但是,如果senderScale具有其他任何價值,性能會受到很大打擊,並且在移動時圖像會出現斷斷續續的情況。

我繪製的圖像是一個UIImage對象。我

UIGraphicsBeginImageContextWithOptions(self.bounds.size, NO, 0.0); 

創建它,並繪製一個簡單UIBezierPath(stroke)

self.image = UIGraphicsGetImageFromCurrentImageContext(); 

我做錯什麼了嗎?關閉反鋸齒功能並沒有改善很多。

編輯: 我嘗試這樣做:

rectImage = CGRectMake(0, 0, self.frame.size.width * senderScale, self.frame.size.height * senderScale); 
[image drawInRect:rectImage]; 

,但它只是作爲其他方法一樣慢。

回答

1

如果你想這個表現良好,你應該讓GPU使用CoreAnimation,而不是在你的-drawRect:方法繪製圖像做繁重。嘗試創建視圖並執行:

myView.layer.contents = self.image.CGImage; 

然後通過操縱UIView相對於其超級視圖來縮放並轉換它。如果您在-drawRect:繪製圖像你讓做塊傳輸圖像的每一幀的辛勤工作。通過CoreAnimation執行此操作只會出現一次,然後讓GPU縮放並翻譯圖層。

+0

我試圖創建一個視圖,但我無法弄清楚,我應該把翻譯和縮放代碼。 – HSNN

+0

對於翻譯,您可以設置「框架」原點。對於更復雜的轉換使用'transform'屬性。 – ipmcc

相關問題