2011-12-19 62 views
0

我有一些UIView,它們應用了不同的中心和變換。 我想重建這些視圖上的位圖上下文。 (基本上我想要拍攝用戶在屏幕上創建的內容並將其渲染到電影文件中)以與UIView呈現類似的方式繪製使用renderInContext

我能夠在上下文中看到呈現的視圖差不多正確但是似乎存在偏移。我在想這個問題是UIImageView的.center屬性沒有反映在我正在做的轉換中。但我不確定如何去做。 注意,UIViews最初被定位/相對於1024×768屏幕的ipad其中作爲視頻緩衝器是352×288像素

轉化如果我只需添加一個CGContextTranslateCTM(newContext,img.center.x,img.center.y )然後一切看起來完全關閉。任何想法如何正確地將視圖轉換到正確的中心?

CGContextRef newContext = CGBitmapContextCreate(baseAddress, width, height, 8, bytesPerRow, colorSpace, kCGBitmapByteOrder32Little | kCGImageAlphaPremultipliedFirst); 
CGContextRotateCTM(newContext, M_PI_2); 
CGContextScaleCTM(newContext, 1, -1); 

for(int i=0; i<[self.renderObjects count]; i++){ 
    UIImageView * img = [self.renderObjects objectAtIndex:i]; 
    [img setNeedsDisplay]; 
    [img setBackgroundColor:[UIColor colorWithRed:1 green:1 blue:1 alpha:0.2]]; 
    CGContextSaveGState(newContext); 
    CGContextScaleCTM(newContext, 0.375, 0.34); 
    CGContextConcatCTM(newContext, img.transform); 
    [img.layer renderInContext:newContext]; 
    CGContextRestoreGState(newContext); 

} 

回答

0

下面是使它適用於我的代碼:請注意,1024,768是因爲UIImageViews定位在iPad座標系中。儘管如此,如果有人可以找到一個通用的解決方案,這將是很好的旋轉。

 UIImageView * curr = your image 
    [curr setNeedsDisplay]; 
    CGContextSaveGState(newContext); 
    CGContextScaleCTM(newContext,height/768.0,width/1024.0); 
    CGContextTranslateCTM(newContext, 768-curr.center.x, curr.center.y); 
    CGContextConcatCTM(newContext, curr.transform); 
    CGContextTranslateCTM(newContext, -curr.bounds.size.width/2, -curr.bounds.size.height/2); 
    [curr.layer renderInContext:newContext]; 
    CGContextRestoreGState(newContext); 
相關問題