2012-05-02 40 views
1

我有一個可以平移和縮放以查看不同對象的大型顯示區域。我遇到的問題是,如果我縮小了PNG圖像的質量,UIButton的質量就會降低(但當我放大到100%時,它恢復正常)。它幾乎看起來好像圖像變得過度銳利。這是我將不得不忍受的事情,還是有辦法擺脫這種粒狀邊緣效應?順便說一下,圖像的寬高比總是1:1。UIScrollview在縮小時更改UIButton的圖像質量

回答

0

我能解決這個問題,在我的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; 
    } 
}