我已經創建了一個自定義視圖類,現在只是想繪製縮放圖像以適應視圖,給定一個UIImage。我試圖繪製UIImage.CGImage,但是正如其他人在本站點(和文檔中)證明的那樣,會使圖像呈現顛倒。試圖在自定義視圖中繪製縮放UIImage,但沒有任何渲染
所以,在我發現另一個問題的答案的建議,我試圖直接繪製它,但沒有任何渲染視圖,我不知道爲什麼。這裏是我的繪製代碼:
- (void)drawRect:(CGRect)rect {
// Drawing code
[super drawRect:rect];
if (self.originalImage) {
[self drawImage];
}
}
- (void) drawImage {
if (CGSizeEqualToSize(originalImage.size, self.frame.size) == NO) {
CGFloat scaleFactor = 1.0;
CGFloat scaledWidth = 0.0;
CGFloat scaledHeight = 0.0;
CGPoint thumbPoint = CGPointMake(0.0, 0.0);
CGFloat widthFactor = self.frame.size.width/originalImage.size.width;
CGFloat heightFactor = self.frame.size.height/originalImage.size.height;
if (widthFactor < heightFactor) {
scaleFactor = widthFactor;
} else {
scaleFactor = heightFactor;
}
scaledWidth = originalImage.size.width * scaleFactor;
scaledHeight = originalImage.size.height * scaleFactor;
if (widthFactor < heightFactor) {
thumbPoint.y = (self.frame.size.height - scaledHeight) * 0.5;
} else if (widthFactor > heightFactor) {
thumbPoint.x = (self.frame.size.width - scaledWidth) * 0.5;
}
UIGraphicsBeginImageContext(self.frame.size);
CGRect thumbRect = CGRectZero;
thumbRect.origin = thumbPoint;
thumbRect.size.width = scaledWidth;
thumbRect.size.height = scaledHeight;
[originalImage drawInRect:thumbRect];
self.scaledImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
} else {
self.scaledImage = originalImage;
}
}
我的理解(這種學習後位)是該UIGraphicsBeginImageContext函數創建一個屏幕外爲我畫成,所以現在我怎麼呈現在原始的頂部這方面一?
好吧,好的。一個老笑話才浮現在腦海中:男人去看醫生,並說「當我這樣做的時候會感到痛苦」。醫生說:「那就不要那樣做。」 我推薦調用'GraphicsBegin'和'GraphicsEnd'以及圖像渲染 - 但我讀過的很多東西都表明應該以這種方式創建圖形上下文。它可能在沒有它的情況下工作,但這是否是錯誤的方式? – 2010-04-10 16:38:39