1
我有一個可以平移和縮放以查看不同對象的大型顯示區域。我遇到的問題是,如果我縮小了PNG圖像的質量,UIButton的質量就會降低(但當我放大到100%時,它恢復正常)。它幾乎看起來好像圖像變得過度銳利。這是我將不得不忍受的事情,還是有辦法擺脫這種粒狀邊緣效應?順便說一下,圖像的寬高比總是1:1。UIScrollview在縮小時更改UIButton的圖像質量
我有一個可以平移和縮放以查看不同對象的大型顯示區域。我遇到的問題是,如果我縮小了PNG圖像的質量,UIButton的質量就會降低(但當我放大到100%時,它恢復正常)。它幾乎看起來好像圖像變得過度銳利。這是我將不得不忍受的事情,還是有辦法擺脫這種粒狀邊緣效應?順便說一下,圖像的寬高比總是1:1。UIScrollview在縮小時更改UIButton的圖像質量
我能解決這個問題,在我的scrollViewDidEndZooming方法中使用找到的答案here。這裏是我的代碼:
大小功能
- (UIImage *)resizeImage:(UIImage*)image newSize:(CGSize)newSize {
CGRect newRect = CGRectIntegral(CGRectMake(0, 0, newSize.width, newSize.height));
CGImageRef imageRef = image.CGImage;
UIGraphicsBeginImageContextWithOptions(newSize, NO, 0);
CGContextRef context = UIGraphicsGetCurrentContext();
// Set the quality level to use when rescaling
CGContextSetInterpolationQuality(context, kCGInterpolationHigh);
CGAffineTransform flipVertical = CGAffineTransformMake(1, 0, 0, -1, 0, newSize.height);
CGContextConcatCTM(context, flipVertical);
// Draw into the context; this scales the image
CGContextDrawImage(context, newRect, imageRef);
// Get the resized image from the context and a UIImage
CGImageRef newImageRef = CGBitmapContextCreateImage(context);
UIImage *newImage = [UIImage imageWithCGImage:newImageRef];
CGImageRelease(newImageRef);
UIGraphicsEndImageContext();
return newImage;
}
滾動型方法 (Widget是一個UIViewController子類,包含一個按鈕和存儲圖像的全分辨率「widgetImage」說該按鈕應顯示)
- (void)scrollViewDidEndZooming:(UIScrollView *)scrollView withView:(UIView *)view atScale:(float)scale
{
for(Widget *theWidget in widgets){
UIImage *newScaledImage = [self resizeImage:theWidget.widgetImage newSize:CGSizeMake(theWidget.view.frame.size.width * scale, theWidget.view.frame.size.height * scale)];
[theWidget.widgetButton setImage:newScaledImage forState:UIControlStateNormal];
// theWidget.widgetButton.currentImage = newScaledImage;
}
}